Je voudrais étendre le modèle User, donc je peux mettre des champs et des fonctions supplémentaires (pas seulement les champs, gardez à l'esprit, ou bien (enfin, encore) je pourrais utiliser get_profile(), ce que je trouve moche).Etendre le modèle Django User (le faire fonctionner dans request.user), Django 1.2.3
Aussi je voudrais utiliser ce nouveau modèle étendu de l'utilisateur dans request.user, comme ceci:
modèle d'utilisation étendu:
# imports etc
class CustomUser(User):
extra_field = ...
def extra_function(self):
...
return ...
vue Exemple d'utilisation:
# imports etc
def extra_function_view(request):
print request.user.username
print request.user.extra_field
request.user.extra_function()
return HttpResponse(...)
Le Le code ci-dessus ne fonctionne évidemment pas, car extra_field et extra_function ne sont pas dans le modèle User.
Maintenant, j'ai trouvé une méthode pour y parvenir, en utilisant un backend d'authentification, qui est assez complexe, et que je n'ai pas pu utiliser dans Django 1.2.3.
AUTHENTICATION_BACKENDS = (
'myproject.auth_backends.CustomUserModelBackend',
)
...
CUSTOM_USER_MODEL = 'accounts.CustomUser'
En outre plus essayé d'autres méthodes, comme l'utilisation de signaux, qui ne fonctionnait pas. Pour moi, la seule solution semble être d'ajuster le modèle User au sein de Django (ce qui n'est pas une solution élégante, en ajustant le code source de Django, mais c'est une solution soignée au niveau du code).
Donc, je cherche une solution pour cela .. a-t-on déjà fait ça?
Merci pour l'instant
Stefan
Semblable à ce que j'ai fait, mais je vis avec l'héritage du modèle. –
Complètement compréhensible et valide, il m'a énervé à aucune fin si :) – Xealot
Alors que dites-vous maintenant? Que je dois aller pour le backend d'authentification pour éditer le modèle d'utilisateur Django original? Si oui, copier le répertoire contrib.auth dans mon propre projet est suffisant, et compréhensible pour Django lors de l'ajout à mes paramètres? – Boemknaldaarstaatieal