在 M2M 字段 Django 中过滤标签
Posted
技术标签:
【中文标题】在 M2M 字段 Django 中过滤标签【英文标题】:Filtering tags in M2M Field Django 【发布时间】:2022-01-20 22:27:33 【问题描述】:所以我有我的模型
Class Category((models.Model)
category = models.CharField()
class Group(models.Model)
Title = models.CharField()
category = models.ManyToManyField(Category, related_name= tags)
所以我希望能够过滤所有标签与当前视图中的组相似的组
在我的views.py中我试过了
group = Group.objects.get(id=pk)
groups = Group.objects.filter(category=group.category)
但这不起作用
【问题讨论】:
什么是“相似”标签?一个标签的共同点?group
的所有标签都应该在groups
的类别中,完全匹配(这些和仅这些类别)?还有什么?
好的,所以每个组都有机会选择已经存在的标签,但它们不限于一个标签,假设A组有以下标签Movie,Anime和Music,Group be有只有我希望能够检索组的音乐是因为它与组 A 具有相似的标签
关于类别有一个或多个组,一个组有一个或多个类别,数据库级别的m2m字段是一个单独的表检查文档以进行澄清docs.djangoproject.com/en/3.2/topics/db/examples/many_to_many/…
【参考方案1】:
您可以检索所有具有至少一个Category
的组:
Group.objects.filter(<strong>category__in=group.category.all()</strong>).distinct()
.distinct()
call [Django-doc] 阻止列出 Group
的次数与匹配的 category
s 相同。
另一种选择是反向使用关系,因此可以使用:
Group.objects.filter(<strong>category__tags=group</strong>).distinct()
然而,相关名称没有多大意义:related_name=…
parameter [Django-doc] 是反向关系的名称,related_name='groups'
因此更有意义。在这种情况下,我们查询:
Group.objects.filter(<strong>category__groups=group</strong>).distinct()
【讨论】:
以上是关于在 M2M 字段 Django 中过滤标签的主要内容,如果未能解决你的问题,请参考以下文章