1

次の問題があります。

私のモデルは、次のシナリオと同様に設定されています

class Membership(models.Model):
    user = models.ForeignKey(User)
    verified = models.BooleanField()

class ClubMembership(Membership):
    club = models.ForeignKey(Club)

class ForumMembership(Membership):
    forum = models.ForeignKey(Forum)

class Club(models.Model):
    members = models.ManyToManyField(User, through='ClubMembership')

class Forum(models.Model):
    members = models.ManyToManyField(User, through='ForumMembership')

(以前はメンバーシップを抽象クラスとして持っていましたが、これでは基本クラスを照会できませんでした。) 特定のユーザーに対してまだ検証されていないすべてのメンバーシップなどを照会したいと考えています。できます

memberships = Membership.objects.filter(verified=False)

これにより、verified=False のすべてのメンバーシップのリストが表示されます。ただし、1)メンバーシップがどのサブクラスであるかを確認する方法が見つかりません。2)サブクラスのタイプがわかっている場合でも、「クラブ」または「フォーラム」フィールドにアクセスできません。基本クラスにクエリを実行した後、基本クラスの型にアクセスする方法はありますか? また、サブクラスのフィールドにアクセスするにはどうすればよいですか?

4

1 に答える 1

3

1)メンバーシップがどのサブクラスであるかを確認します

属性をチェックすることでそれを行うことができます

if hasattr(membershipobj, 'clubmembership'):
   #its base for ClubMembership
elif hasattr(membershipobj, 'forummembership'): 
  #its for ForumMembership

2) 「クラブ」または「フォーラム」フィールドにアクセスできません

子オブジェクトを介して子オブジェクト フィールドにアクセスする

membershipobj.clubmembership.club  
membershipobj.forummembership.forum  
于 2013-11-11T10:20:42.180 に答える