我有一个与Meeting
相关的模型Signup
,而该模型又与Attendee
相关。
型号:
class Meeting(models.Model):
date = models.DateTimeField(auto_now=False)
class Signup(models.Model):
meeting = models.ForeignKey(Meeting, on_delete=models.CASCADE, default=1)
...
class Attendee(models.Model, PrintNameTag):
signup = models.ForeignKey(Signup, on_delete=models.CASCADE, related_name="attendee")
attendee = models.CharField(blank=False, max_length=200)
...
如何在Meeting.objects上创建一个查询集,该查询集还将返回Signup和Attendee中的其他字段?我需要所有数据来生成报告。我不希望更改模型,因为这看起来应该是可行的。我还想查询会议,因为查询中还有其他一些需要会议的内容(为简单起见,已删除)。
这是我目前拥有的:
qs = Meeting.objects.filter(id__in=queryset).prefetch_related('signup').annotate(attendee_signup=F('signup__attendee_signup'))
我不断收到“无法将关键字与会者ID解析为字段”
我还尝试了以下形式的变化:
qs = Meeting.objects.filter(id__in=queryset).select_related('signup').filter(attendee__signup=signup_id)
我收到“未定义名称'signup_id'”
我是python和Django的新手,我不知道是否需要使用F和/或注释,prefech_related或select_related。我已经查看了每个文件的功能,但是找不到正确的语法来使其正常工作。我觉得我已经尝试了每个组合,而此时我只是在混搭键。有人可以帮忙吗?
答案 0 :(得分:0)
如果您将related_name='signups'
添加到Signup.meeting
字段中,则此应该起作用:
meetings = Meeting.objects.filter(id__in=queryset).prefetch_related('signups__attendee')
以上内容将获取所有会议,这些会议的所有注册以及这些注册的所有与会者。从那里,您可以遍历所有内容,并且已经从数据库中获取了所有内容:
for m in meetings:
for s in m.signups:
for a in s.attendee:
# whatever
(顺便说一句,我建议将related_name
从“参加者”更改为“参加者”,因为复数形式往往更直观。)