【问题标题】:Django: Filter a model with multiple parameters for a single ManyToManyFieldDjango:为单个ManyToManyField过滤具有多个参数的模型
【发布时间】:2014-03-18 08:49:31
【问题描述】:

我有以下型号。

class Contents (models.Model):
  ...
  tags = models.ManyToManyField('Tag')

class Tag (models.Model):
  ...
  name = models.CharField(max_length=20)

考虑一下,我正在尝试获取同时标记为 tag1 and tag2 的内容。

在 Django 中有没有办法做类似Contents.objects.filter(tags__name = ['tag1','tag2']) 的事情

这里tag1,tag2,...是动态生成的。

更新:

我一直在使用for loop。我正在寻找一种有效的解决方案。

【问题讨论】:

    标签: django many-to-many


    【解决方案1】:

    如果您要查找列表,那么您应该可以使用查找__in

    Contents.objects.filter(tags__name__in = ['tag1','tag2'])
    

    请参阅docs

    对于同时包含且仅包含两个标签的查询集,您可能需要链接过滤器调用:

    tags = ['tag1','tag2']
    contents = Contents.objects.all()
    for tag in tags:
      contents = contents.filter(tags__name = tag)
    

    这应该过滤查询集,以便您只有一个两个标签都匹配的查询集。从这个问题复制的方法:Django queryset to match all related objects

    【讨论】:

    • __in 不是像or 那样工作吗?我希望提取标记为tag1 and tag2 而不是tag1 or tag2 的内容
    • 你会想使用Q 然后@user24665。给我一秒钟更新。
    • @bozloz | 也像 OR 一样工作,我试过 & 仍然无法工作
    • 我明白了。我为你找到了一个应该有效的答案。也许没有更简单的解决方案:stackoverflow.com/questions/6783747/…
    • @user24665 或许可以尝试使用原始 sql:docs.djangoproject.com/en/dev/topics/db/sql。做一些 WHERE 这个和那个。
    猜你喜欢
    • 2023-03-29
    • 2018-04-11
    • 2019-12-04
    • 1970-01-01
    • 2015-08-06
    • 2021-06-16
    • 2018-11-03
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多