Фильтр Django по нескольким полям в промежуточной таблице «многие ко многим»

В моем проекте django есть следующие модели:

class Video(models.Model):
    media = models.ForeignKey(Media)

class Media(models.Model):
    title = models.CharField(max_length=255)
    formats = models.ManyToManyField(Format,through='MediaFormat',related_name='media',blank=True)

class Format(models.Model):
    title = models.CharField(max_length=50)

class MediaFormat(models.Model):
    status = models.IntegerField()
    format = models.ForeignKey(Format)
    media = models.ForeignKey(Media)

Теперь я хочу отфильтровать все видео, которые имеют определенный формат, И код статуса для этого формата - 10 (готово к использованию). Как я могу это сделать?

У меня есть следующие модели в моем проекте django:

class Video(models.Model):
    media = models.ForeignKey(Media)

class Media(models.Model):
    title = models.CharField(max_length=255)
    formats = models.ManyToManyField(Format,through='MediaFormat',related_name='media',blank=True)

class Format(models.Model):
    title = models.CharField(max_length=50)

class MediaFormat(models.Model):
    status = models.IntegerField()
    format = models.ForeignKey(Format)
    media = models.ForeignKey(Media)

Теперь я хочу отфильтровать все видео, которые имеют определенный формат, И код состояния для этого формата - 10 (готов к использованию). Как я могу это сделать?

В моем проекте django есть следующие модели:

class Video(models.Model):
    media = models.ForeignKey(Media)

class Media(models.Model):
    title = models.CharField(max_length=255)
    formats = models.ManyToManyField(Format,through='MediaFormat',related_name='media',blank=True)

class Format(models.Model):
    title = models.CharField(max_length=50)

class MediaFormat(models.Model):
    status = models.IntegerField()
    format = models.ForeignKey(Format)
    media = models.ForeignKey(Media)

Теперь я хочу отфильтровать все видео, которые имеют определенный формат, И код состояния для этого формата - 10 (готов к использованию). Как я могу это сделать? (при условии, что это формат f):

f = Format.objects.get(pk=3)

Я хотел бы использовать:

Video.objects.filter(media__formats=f, media__mediaformat__status=10)

Но тогда это вернет все видео, которые соответствуют обоим этим предположениям:

  • a) содержат этот конкретный формат и
  • б) содержать любой формат со статусом 10

Как я должен фильтровать только тех, у кого этот конкретный формат с кодом статуса 10?

спасибо!

13
задан user684334 30 March 2011 в 17:06
поделиться