Ich habe zu einem benutzerdefinierten Django-Benutzermodell (CustomUser) migriert, in dem mehrere andere Modelle Fremdschlüssel und M2M-Beziehungen haben. CustomUser wird auch von Zinnias Autorenmodell (Autor) unterklassifiziert - Zinnia ist eine ausgezeichnete Third Party Blogging App.Django benutzerdefinierte Benutzermodell Unterklasse (von Zinnia)
Mein Problem ist, dass wenn ich auf CustomUser über eine Beziehung z. B. OtherModel.customuser zugreifen, es eine Instanz von CustomUser zurückgibt, aber in meinen Ansichten, wenn ich auf request.User zugreifen, ist es eine Instanz von Author. Da die Attribute von Author und CustomUser identisch sind, macht dies im Allgemeinen keinen großen Unterschied, aber wenn ich die Äquivalenz von Benutzerobjekten in meinen Views testen möchte, muss ich user.user.id statt request.user verwenden und ich instinktiv nicht. t wie die Zweideutigkeit, mit welchem Modell ich es zu tun habe.
Möglicherweise bin ich besser darüber hinwegkommen und die Dinge so lassen wie sie sind, da alles nach ein paar kleinen Codeänderungen in meinen Ansichten funktioniert. In einer perfekten Welt würde ich jedoch konsequent auf das gleiche Nutzermodell verweisen, bin aber unsicher, wie ich am besten voran komme. Irgendwelche Ideen?
settings.py
AUTH_USER_MODEL = 'profiles.CustomUser'
models.py (in Profilen app)
class CustomUser(AbstractUser):
visits = models.PositiveIntegerField(
_('visits'),
default=0,
blank=True
)
def __unicode__(self):
return self.username
class OtherModel(models.Model):
author = models.ForeignKey(CustomUser)
weiß, dass ich die Empfehlung in den documentation ist die Beziehung mit settings.AUTH_USER_MODEL anstatt direkt mit dem machen benutzerdefiniertes Benutzermodell Ich plane, das zu ändern, will aber verstehen, was ich tue, bevor sie wieder in den Schmerz einer Migration starten
author.py (in Zinnie app)
from django.contrib.auth import get_user_model
@python_2_unicode_compatible
class Author(get_user_model()):
"""
Proxy model around :class:`django.contrib.auth.models.get_user_model`.
"""
objects = get_user_model()._default_manager
published = EntryRelatedPublishedManager()
in den Konsolen get_user_model() gibt die Profile .models.CustomUser class
Ich habe die gleiche Problem. Hast du eine Lösung gefunden? – Blaise