Angenommen, es gibt ein abstraktes Modell CarOwner: wobei eine Person oder ein Unternehmen ein CarOwner sein kann. Darüber hinaus kann ein Auto mit einer bestimmten VIN entweder einer Person oder einem Unternehmen gehören (in Beziehung stehen), aber nicht beiden (ausschließlicher Fall). Ganz am Ende des folgenden Codes habe ich zwei Möglichkeiten vorgestellt (siehe Kommentare im Code "# 1. SOLLTE ICH DAS HABEN???" und "# 2. ...ODER SOLLTE ICH DAS HABEN???"). In der ersten Möglichkeit wird eine Many-to-One-Beziehung zu einem abstrakten Modell hergestellt und ich bin mir nicht sicher, ob dies der richtige Weg ist. Im zweiten Fall werden zwei Beziehungen hergestellt und ich bin mir auch nicht sicher, ob das richtig ist, insbesondere ist nicht klar, wie man sie gegenseitig ausschließen kann. Also, welche ist richtig und wenn keine, bitte geben Sie die richtige Antwort, wenn Sie könnten. Danke.
class CarOwner(models.Model):
location = models.CharField(max_length=50, blank=True)
class Meta:
abstract = True
class Person(CarOwner):
name = models.CharField(max_length=50, blank=True)
class Business(CarOwner):
business_id = models.CharField(max_length=50, blank=True)
class Car(models.Model):
vin = models.CharField(max_length=50, blank=True)
# 1. SOLLTE ICH DAS HABEN??? (CarOwner ist abstrakt)
carowner = models.ForeignKey(CarOwner, blank=True, null=True)
# 2. ...ODER SOLLTE ICH DAS HABEN???
person = models.ForeignKey(Person, blank=True, null=True)
business = models.ForeignKey(Business, blank=True, null=True)