【问题标题】:How to get all the objects whose tags are subset of tags in list Django-taggit如何获取其标签是列表Django-taggit中标签子集的所有对象
【发布时间】:2015-07-06 16:35:05
【问题描述】:

我正在使用 django-taggit 进行标记。

class Taggedwebsites(TaggedItemBase):
  content_object = models.ForeignKey('website')

class website(models.Model):
      tags=TaggableManager(through=Taggedwebsites,blank=True)

现在我想要所有标签是动态提供的标签列表超集的网站。

例如,

tag_list=['python','django','database']

那么我想要所有必须至少有这三个集合的网站对象。

result=website.objects.filter(tags__name_on=tag_list).distinct()

不起作用,因为它没有给出标签是 tag_list 超集的对象。

如何在过滤器中执行这个查询?

【问题讨论】:

    标签: python django django-models django-taggit


    【解决方案1】:

    在查询“tags__name_on”中,“on”这个词没有在 django 中定义,你应该使用 in 代替。您希望对象的对象必须至少具有这三个集合,您应该使用 'in' 参数。这是查询集的文档:docs.djangoproject.com/en/1.8/ref/models/querysets/#in

    尝试:

    result=website.objects.filter(tags__name__in=tag_list).distinct()
    

    或:

    result=website.objects.distinct(tags__name__in=tag_list)
    

    【讨论】:

    • 请用英语解释这些解决方案(及其差异)。谢谢。
    • 好的,他有一个未定义的查询 "tags__name_on" 'on' 词在 django 中没有定义,你应该使用 in 代替。他想要具有必须至少具有这三个集合的对象的对象,他应该使用“in”参数。这是查询集的文档:docs.djangoproject.com/en/1.8/ref/models/querysets/#in
    • 感谢您的解释。但是,我想说你应该改进你的答案来解释解决方案是如何工作的。这使您的答案更易于理解,并且可以使其对更多人有用,而不仅仅是原始海报。谢谢。
    • 我得到 DatabaseError “多于一行由用作表达式的子查询返回”
    • @Forethinker 这可能是因为您在查询中使用了 .get。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多