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')

(我曾经将 Membership 作为一个抽象类,但这不会让我查询基类。)我现在想查询例如尚未为特定用户验证的所有成员资格。我可以

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

这给了我所有已验证 = 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 回答