Опрос родителя в модели наследования в Django многие ко многим через ключевое слово

У меня есть следующая проблема:

Мои модели настроены аналогично следующему сценарию

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)

и это дает мне список всех участников с проверенным =False. Однако я не могу найти способ 1) проверить, к какому подклассу относится членство, и 2) я не могу получить доступ к полю "клуб" или "форум", даже когда знаю тип подкласса. Есть ли в любом случае доступ к типу базового класса после того, как я запросил базовый класс, и как мне получить доступ к полям подкласса?

1 ответ

Решение

1) проверить, к какому подклассу относится членство

Вы можете сделать это, проверив атрибут

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

2) Я не могу получить доступ к полю "клуб" или "форум"

Доступ к полям дочерних объектов через дочерний объект

membershipobj.clubmembership.club  
membershipobj.forummembership.forum  
Другие вопросы по тегам