Le problème est le modèle d'utilisateur par défaut n'a pas certaines options très utiles données aux champs par exemple unique = Vrai au champ de courrier électronique.Comment remplacer le champ de modèle utilisateur par défaut dans Django?
J'ai lu cette question: Override default User model method, et vérifié Proxy Model concept, mais sans effet.
Au début, j'essayé:
from django.contrib.auth import models
class User(models.User):
class Meta:
proxy = True
email = EmailField('e-mail address', unique=True, blank=False)
qui a donné lieu à:
django.core.exceptions.FieldError: Proxy model 'User' contains model fields.
donc la prochaine était:
from django.contrib.auth import models
class User(models.User):
class Meta:
proxy = True
models.User.email = EmailField('e-mail address', unique=True, blank=False)
et cette "solution" n'a pas d'effet du tout. Le modèle d'utilisateur par défaut se comportait comme avant.
Je suis intéressé par une solution non-monkey-patching seulement.
Édition: Ok. Singe-patching est acceptable pour moi, mais comment faire cela raisonnablement? (Je veux dire ne change pas le fichier qui se trouve dans /usr/pyshared/python2.6/...
)
Ah, allez ... juste un petit peu d'affaire de singe? :-) Malheureusement je ne pense pas que tu vas trouver ce que tu veux vraiment. * Tout le monde * veut modifier le modèle User d'une manière ou d'une autre, mais vous avez découvert que les classes de la base de données Django ne sont pas des classes Python, en particulier en ce qui concerne les champs prioritaires dans le parent. http://docs.djangoproject.com/fr/dev/topics/db/models/#field-name-hiding-is-not-permitted –
Le patch de singe serait assez bon si le langage lui-même le supporte en interne ;-) Les classes de Ruby sont ouvertes, donc vous pouvez changer l'implémentation des classes, même intégrées, lors de l'exécution, ainsi le modèle User pourrait être modifié en Ruby en 3 lignes maximum. En tout cas, merci pour votre réponse. Savez-vous comment faire ce patch-singe raisonnable? –