Filtering django queryset by a value of the through table of a m2m relationship(用M2M关系直通表值过滤Django查询集)
问题描述
我正在尝试这样做: queryset.filter(m2m_related_lookup__through_table_field=value)
以下是简化后的模型:
我想很简单,只是一个带有自定义直通表的多2多个,这样我就可以在那里存储注册日期和其他一些东西。 此关系设置为Activity,Related_Name为‘Enabled_Actives’。那么,如何使用Django的ORM查询"ActivityEnrolled.Enrollment_Date在2019年的所有用户"?
这是用于Django Admin中CHANGE_LIST视图的自定义过滤(带有admin.SimpleListFilter),它列出了用户项。换句话说,就像我在做User.objects.filter(Blabla)。
正在尝试:queryset.filter(enrolled_activities__date_enrolled__year=2019)显然会抛出错误Related Field Get Invalid Lookup:Date_Enabled,因为Enabled_Activity引用的不是直通表,而是相关表(即:Activity),并且该字段不存在。
唯一的解决方案是查询直通表而不是用户吗? LIKE:ActivityEnrolled.objects.filter(date_enrolled__year=2019)+对结果进行分组,以便为每个用户只返回一行。我知道我可以做到,但这很糟糕,我一直在试图找到一种更干净的方法来避免它,但没有成功。
非常感谢!!
推荐答案
多对多关系实际上只是两个一对多表的组合。这样我们就可以过滤上的一对多关系了:那么,如何使用Django的ORM查询
ActivityEnrolled.enrollment_date
在2019年的所有用户?
如果.distinct()
用户在2019年注册了多个活动,则.distinct()
将阻止生成同一用户。
这篇关于用M2M关系直通表值过滤Django查询集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!