0

考虑我的模型:

class CampUserInvitation(models.Model):
    user = models.ForeignKey('auth.User')
    camp = models.ForeignKey('events.Camp')
    user_accepted = models.BooleanField(default=False)

上面这个模型是 Camp 和 User 之间 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 认为 'accepted' 是用户的参数?我不应该为此使用双下划线吗?

4

1 回答 1

2

这根本不是正在发生的事情。

invited是对 User 模型的引用,因此当您过滤受邀时,这就是您过滤的模型。如果您需要对 CampUserInvitation 进行过滤,则需要在该模型上使用 ForeignKey 的反向关系:

 self.campuserinvitation_set.filter(user_accepted=True)

评论后编辑这可能有效:

self.invited.filter(campuserinvitation__user_accepted=True)
于 2013-08-25T22:14:49.733 回答