Опрос родителя в модели наследования в 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