小编use*_*334的帖子

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)
Run Code Online (Sandbox Code Playgroud)

现在,我想过滤所有具有特定格式的视频,并且该格式的状态代码为10(可以使用).我怎样才能做到这一点?(假设f是格式):

f = Format.objects.get(pk=3)
Run Code Online (Sandbox Code Playgroud)

我很想用:

Video.objects.filter(media__formats=f, media__mediaformat__status=10)
Run Code Online (Sandbox Code Playgroud)

但是,这将返回所有符合这两个假设的视频:

  • a)包含该特定格式,以及
  • b)包含状态为10的任何格式

我该如何过滤只有状态代码为10的那种特定格式的人?

谢谢!

django many-to-many django-orm

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

django ×1

django-orm ×1

many-to-many ×1