考虑我的模特:
class CampUserInvitation(models.Model):
user = models.ForeignKey('auth.User')
camp = models.ForeignKey('events.Camp')
user_accepted = models.BooleanField(default=False)
以上模型是Camp和用户之间m2m关系的中间模型:
class Camp(Event):
invited = models.ManyToManyField('auth.User',
through='events.CampUserInvitation')
def get_users_signed(self):
return (self.invited
.filter(user_accepted__exact=True)
.filter(user_accepted_timestamp__lte=self.invitation_deadline)
)
当我想要仅将user_accepted字段设置为True的那些(在上面的get_users_signed方法中)过滤所有用户的查询集时
self.invited.filter(user_accepted__exact=True)
我明白了:
Cannot resolve keyword 'user_accepted' into field. Choices are: <bunch of attributes of the User class>
为什么django认为'接受'是用户的参数?我不应该使用双下划线吗?
答案 0 :(得分:1)
这根本不是发生的事情。
invited
是对用户模型的引用,因此当您对邀请进行过滤时,这就是您要过滤的模型。如果您需要在CampUserInvitation上进行过滤,则需要使用该模型上ForeignKey的反向关系:
self.campuserinvitation_set.filter(user_accepted=True)
评论后修改这可能有效:
self.invited.filter(campuserinvitation__user_accepted=True)