Создаю объект инвестора. Инвесторами могут быть люди или компании.
Как я могу создать объект модели, который мог бы представлять любой из этих типов в django?
Вот несколько способов, которыми я думал:
1. Наличие двух необязательных внешних ключей:
class Investor(models.Model):
company = models.ForeignKey('companies.Company',on_delete=models.CASCADE, blank=True, null=True)
customer = models.ForeignKey('accounts.Customer',on_delete=models.CASCADE, blank=True, null=True)
investor_name = models.CharField(max_length=255)
2. Используя родовое отношение:
class TaggedItem(models.Model):
investor_name = models.CharField(max_length=255)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
3. Абстрактная модель, которая наследуется как клиентом, так и компанией.
class Entity(models.Model)
class Customer(Entity)
Class Company(Entity)
Каков наиболее разумный с архитектурной точки зрения маршрут, который не вызовет у меня много проблем в будущем?
Можно использовать второй вариант и ограничить модели, разрешенные в отношении.






Почему вы с подозрением относитесь к первому варианту? Мне кажется, это звучит нормально.