Дан следующий код:
class BaseMedium(models.Model):
title = models.CharField(max_length=40)
slug = models.SlugField()
class A(BaseMedium):
url = models.URLField()
class B(BaseMedium):
email = models.EmailField()
Теперь я хочу запросить каждый BaseMedium.
b = BaseMedium.objects.all()
Как распечатать каждую информацию, включая поля подкласса, не зная, какой тип подкласса?
b[0].a
будет печатать информацию, если b[0]
на самом деле связано с A
экземпляром, но если оно связано с B
, то будет напечатано исключение DoesNotExist
.
Это имеет смысл, но я хотел бы иметь общую переменную или метод, который возвращает связанный объект.
Может быть, мой макет базы данных не очень хорош для запросов таким образом, если так, я буду рад, если вы порекомендуете лучший макет.
Я думал об использовании GenericForeignKey
class Generic(models.Model):
basemedium = models.ForeignKey('BaseMedium')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
но это решение кажется сложным, и я думаю, что у вас, ребята, есть лучшие решения.