Ich versuche herauszufinden, wie man eine Eins-zu-Viele-Beziehung zwischen zwei Modellen definiert. Die Schwierigkeit hierbei ist, dass ich keines der Modelle anfassen will und daher nicht den üblichen ForeignKey (Many-to-One) verwenden kann.Django-Eins-zu-Viele-Beziehung in Modellen (nicht über Lookups)
Es gibt viele Fragen zu diesem Thema, aber sie alle sprechen entweder über das Nachschlagen (Reverse ForeignKey-Lookup) oder sie schlagen vor, nur einen Fremdschlüssel zu einer Seite hinzuzufügen. Hier ist eine similar question. Ich werde das gleiche Codebeispiel verwenden. Dies ist, was ich suche:
class Dude(models.Model):
numbers = models.OneToManyField('PhoneNumber')
class PhoneNumber(models.Model):
number = models.CharField()
Normalerweise würde ich voran gehen und nur einen Fremdschlüssel zu Phone hinzufügen, wie in vielen Antworten vorgeschlagen:
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude, related_name='numbers')
Aber in meiner Situation würde Ich mag zu Berühren Sie nicht das PhoneNumber-Modell und definieren Sie daher etwas im Dude-Modell.
Der Grund dafür ist, dass ich ein Modell definiere, das einen besonderen Umstand beschreibt, der selten benutzt wird. Wenn ich einen ForeignKey im (PhoneNumber) -Modell verwende, würde 99,9% aller Instanzen dieses Feld leer lassen. Ich mag die Idee nicht, ein Feld zu haben, das immer leer ist - vielleicht ist das mein Problem.
Eine mögliche Problemumgehung besteht darin, ein Viele-zu-Viele-Feld zu definieren und dann eine Logik hinzuzufügen, die "viele" auf der einen Seite verhindert und die andere Seite nicht leer macht.
Ich hoffe, ich könnte mein Problem klar beschreiben.
Frage: Gibt es eine Möglichkeit, eine Eins-zu-viele-Beziehung zu definieren? Gibt es eine bessere Lösung mit einem anderen Ansatz für mein Problem?
P.S. Der einzige Treffer, den ich von den Django-Dokumenten bekomme, ist ein Feldattribut one_to_many, das, wie ich vermute, für das Nachschlagen verwendet wird.
Mögliches Duplikat von [Wie man eine Eins-zu-Viele-Beziehung in Django ausdrückt] (https://stackoverflow.com/questions/6928692/how-to-express-a-one-in- Viele-Beziehung-in-Django) – ptr
Es ist absolut nichts falsch daran, eine zu haben Feld, das normalerweise leer ist.Es nimmt keinen nennenswerten Platz in Ihrer Datenbank ein, wenn Sie sich darüber Sorgen machen. –
Ich verlinke diese Frage tatsächlich als "ähnliche Frage" in meiner Frage. Der Grund, warum die Antwort auf diese Frage nicht befriedigend ist, ist, dass ich das Modell von phoneNumber nicht berühren möchte. – jimfawkes