Jeder weiß, wie man ein Fremdschlüsselfeld erstellt und es immer auf dasselbe Modell zeigt, bis jetzt habe ich diese.
%Vor%Aber ich habe Fehler beim Start. Ich ziele darauf ab, es zu benutzen,
%Vor%Keine weiteren Erklärungen erforderlich.
Bearbeiten: Ich will das, weil ich diesen Fremdschlüssel in Ruhe an einigen Stellen habe. Wenn ich den Verbose_name des Feldes ändern möchte, möchte ich, dass alle meine Felder von dieser Änderung betroffen sind. Der ausführliche Name war ein Beispiel, möglicherweise ein anderes Attribut.
Ich möchte auch nicht die Einstellungen py verwenden, um die Standardwerte zu deklarieren.
Ich empfehle, dass Sie nur eine einfache Funktion verwenden, um eine ähnlich vorkonfigurierte Instanz von ForeignKey zu erstellen: (keine Instanz der Unterklasse von ForeignKey)
%Vor% Das related_name
-Attribut ist ein Name, der für die Rückwärtsbeziehung vom Zielobjekt othermodel
zu allen Objekten verwendet wird, die darauf verweisen. Dieser Name muss in anderen Modellen eindeutig sein ('panbas.PanBasTimeUnit', normalerweise etwas mit einem eindeutigen App- und Klassennamen), oder dieser Name kann '+'
sein, wenn Sie keine Rückwärtsbeziehungsabfrage erstellen möchten. Beide Varianten sind im Beispiel enthalten. Merken Sie sich auch on_delete
.
Wenn Sie wirklich eine Unterklasse erstellen müssten (was sinnvoll ist, wenn mehr Methoden angepasst werden müssen), müssen Sie auch eine deconstruct
-Methode für Migrationen definieren. Es wäre kompliziert, wenn Sie diese Unterklasse später ändern müssten. Es kann nie entfernt, umbenannt usw. werden, weil Migrationen auf ein benutzerdefiniertes Feld
BEARBEITEN
Alternativ können Sie eine abstrakte Basis erstellen modellieren mit diesem Feld und erstellen neue Modelle durch Vererbung oder Mehrfachvererbung :
%Vor%Diese Lösung (inspiriert von einer ungültigen Soution Ykh) ist nützlich, wenn Sie eine Methode zu Modellen mit diesem Feld hinzufügen oder mehrere Felder zusammenfügen möchten, da sonst die ursprüngliche Lösung einfacher ist.
Sie können nicht mehrere Fremdschlüssel für ein Modell mit demselben related_name
.
In der Instanz PanBasTimeUnit
, welchen Manager sollte Django zurückgeben, wenn er <instance>.machine_unit
aufruft? Deshalb müssen Sie auf verwandte Modelle und abstrakte Klassen .
Es sollte gut funktionieren, wenn Sie kwargs['related_name'] = 'machine_unit'
in Ihrem Code entfernen und durch kwargs['related_name'] = "%(app_label)s_%(class)s_related"
oder etwas ähnliches ersetzen.
Tags und Links django django-models