我正在尝试这样做:queryset.filter(m2m_related_lookup__through_table_field = value)
这些是简化的模型:
class User(models.Model):
name = models.CharField("nom", max_length=100)
surname = models.CharField("cognoms", max_length=100)
class Activity(models.Model):
name = models.CharField("Títol", max_length=200)
date_start = models.DateField("Dia inici")
date_end = models.DateField("Dia finalització")
enrolled = models.ManyToManyField(User, related_name='enrolled_activities', through='ActivityEnrolled')
class ActivityEnrolled(models.Model):
class Meta:
db_table = 'main_activity_personetes_enrolled'
activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
user = models.ForeignKey(Personeta, on_delete=models.CASCADE)
date_enrolled = models.DateTimeField("data d'inscripció")
confirmed = models.BooleanField("confirmada", default=False)
我想很简单,只有2个很多,并带有一个自定义的贯通表,因此我可以在其中存储注册日期和其他一些信息。此关系是在“活动”中设置的,关联名称为“ enrolled_activities”。
所以,如何使用Django的ORM查询“ ActivityEnrolled.enrollment_date在2019年的所有用户?”>
这是自定义过滤器(带有admin.SimpleListFilter),用于Django Admin中的change_list视图,该视图列出了User项目。换句话说,就像我在做User.objects.filter(blabla)。
正在尝试:queryset.filter(enrolled_activities__date_enrolled__year = 2019)显然会引发错误相关字段的查询无效:date_enrolled
,因为enrolled_activities不是引用贯通表,而是关联表(这是:活动),并且此字段不存在。是唯一查询贯通表而不是用户的解决方案吗?像:ActivityEnrolled.objects.filter(date_enrolled__year = 2019)+将结果分组,以便每个用户仅返回一行。我知道我可以做到,但是这很讨厌,我一直在尝试寻找一种更干净的方法来避免它,但是没有成功。
非常感谢!
我正在尝试执行以下操作:queryset.filter(m2m_related_lookup__through_table_field = value)这些是简化的模型:类User(models.Model):name = models.CharField(“ nom”,max_length = 100)...
所以,我如何使用Django的ORM查询“
ActivityEnrolled.enrollment_date
在2019年的所有用户?