Django erstellt standardmäßig ein Primärschlüsselfeld für jedes Modell mit dem Namen " id
" mit dem Typ AutoField
. Bei meinen Modellen überschreibe ich, dass ein benutzerdefiniertes UUIDField
als Primärschlüssel verwendet wird, indem das Attribut " primary_key
" verwendet wird. Ich möchte auch, dass das User
-Modell in django.contrib.auth
ein UUIDField
als Primärschlüssel hat, aber das scheint nicht möglich zu sein, ohne den User
-Modell-Quellcode zu ändern.
Gibt es eine empfohlene Methode, um dieses Problem anzugehen?
Dies scheint nicht möglich zu sein, ohne den Quellcode des Benutzermodells zu ändern.
Richtig. Sofern Sie nicht bereit sind, User
zu ändern (oder zu ersetzen), gibt es keinen Weg.
Eine (dünne, hackische) Methode wäre, eine UserProfile
für jede User
Instanz anzuhängen. Jedes User
sollte genau eins UserProfile
haben. Sie können dann Ihr UUIDField
zum Profil hinzufügen. Sie müssen noch benutzerdefinierte Abfragen durchführen, um von UUIDField
nach id
zu übersetzen.
Wenn Sie den Namen UserProfile
nicht mögen, können Sie ihn entsprechend umbenennen. Der Schlüssel ist, dass Sie eine Eins-zu-Eins-Beziehung zu User
haben.
Mit der Veröffentlichung von Django 1.5 unterstützt das Authentifizierungs-Backend jetzt benutzerdefinierte Benutzermodelle:
Ein E-Mail-Feld kann als Benutzername-Feld und das primary_key Argument kann darauf eingestellt werden:
%Vor%