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は「受け入れられた」がユーザーのパラメータであると考えるのですか? そのために二重のアンダースコアを使用することになっていませんでしたか?

4

1 に答える 1

2

それはまったく起こっていることではありません。

invitedUser モデルへの参照であるため、招待されたものをフィルタリングすると、それがフィルタリングするモデルになります。CampUserInvitation でフィルタリングする必要がある場合は、そのモデルの ForeignKey から逆の関係を使用する必要があります。

 self.campuserinvitation_set.filter(user_accepted=True)

コメント後に編集これはうまくいくかもしれません:

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