在我的Django应用中,我具有以下两种事件模型,可以给它们分配任意数量的标签。
class Tag(models.Model):
# ...
class Event(models.Model):
# ...
tags = models.ManyToManyField("Tag")
我还有一个页面,用户可以在其中选择许多标签,然后查看与该标签相关的所有事件。给定一个标签ID列表,我可以使用Django ORM来获取与至少一个给定标签相关联的(独特)事件的列表吗?
如果没有,我也尝试使用以下原始SQL来实现这一点
event.objects.raw("""
SELECT *
FROM app_name_event_tags t
WHERE t.tag_id IN %s
""", selected_tag_ids)
这有两个问题:
1)返回的事件不会不同
2)我的selected_tag_ids列表的占位符语法不正确
答案 0 :(得分:1)
如果您有ptr
个ID的列表,则可以通过执行以下操作获取相关事件
Tag
Events.objects.filter(tags__id__in=selected_tag_ids).distinct()
是整数的可迭代项(selected_tag_ids
对象的pks)
Django文档中的其他示例;
Tag
在多对多here上阅读我的照片
答案 1 :(得分:1)
获取相关事件的最简单方法可能是:
list_of_tags = Tags.objects.filter(your condition)
events = Event.objects.filter(tags__in=list_of_tags).distinct()