Erstens, ich weiß, wie ich das Problem beheben kann, ich versuche nur zu verstehen, warum es passiert. Die Fehlermeldung:
users.profile: Der Name der umgekehrten Abfrage für das Feld 'Adresse' kollidiert mit dem verwandten Feld 'Address.profile'. Fügen Sie einen verwandten Namen hinzu a der Definition für 'Adresse'.
Und der Code:
%Vor%Wenn ich richtig verstehe, diese Zeile:
%Vor% Veranlasst das Hinzufügen eines Attributs zur Klasse Address
mit dem Namen profile
. Was erstellt den anderen "Profil" Namen?
Was, wenn ich keinen umgekehrten Namen brauche? Gibt es eine Möglichkeit, es zu deaktivieren? Adressen werden für ein Dutzend Dinge verwendet, so dass die meisten umgekehrten Beziehungen sowieso leer sind.
Gibt es eine Möglichkeit, die Adressfelder in das Modell zu kopieren, anstatt eine separate Tabelle für Adressen zu haben? Ohne Python-Vererbung (das macht keinen Sinn, und wenn ein Model 2 Adressen hat, funktioniert es nicht).
django docs heißt es :
Wenn Sie möchten, dass Django keine Rückwärtsbeziehung erstellt, setzen Sie related_name auf '+'. Dies stellt beispielsweise sicher, dass das Benutzermodell keine umgekehrte Beziehung zu diesem Modell erhält:
%Vor%aber ich habe es nie selbst ausprobiert ....
Ich bin mir nicht sicher, woher das fehlgeleitete profile
-Feld kommt ... Aber ein Weg, es herauszufinden, wäre: vorübergehend address = models.ForeignKey(…)
vom Profil entfernen, ./manage.py shell
, from ... import Address
und dann sehen, was Address.profile
macht sag es dir.
Ich glaube nicht, dass es einen offiziellen Weg gibt, nur die Felder von einem anderen Modell zu übernehmen, ohne Vererbung zu verwenden ... Aber Sie könnten es so vortäuschen (wo SourceModel
ist, zB Address
und TargetModel
ist) zB Profile
):
(kommt von Djangos ModelBase __new__
Implementierung )
Ich glaube nicht, dass es möglich ist, den umgekehrten Namen zu deaktivieren.
Ich habe gerade eine schnelle grep
über den Code gemacht, und es sieht nicht so aus, als gäbe es keine Logik, die das Einrichten des Feldes related_name
im zugehörigen Modell umgehen würde.
Tags und Links django django-models