J'ai créé un modèle de profil personnalisé qui ressemble à ceci:
from Django.db import models
from Django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey('User', unique=True)
name = models.CharField(max_length=30)
occupation = models.CharField(max_length=50)
city = models.CharField(max_length=30)
province = models.CharField(max_length=50)
sex = models.CharField(max_length=1)
Mais quand je lance manage.py syncdb
, Je reçois:
myapp.userprofile: 'user' a une relation avec le modèle User, qui n'a pas été installé ou est abstrait.
J'ai aussi essayé:
from Django.contrib.auth.models import BaseUserManager, AbstractUser
Mais cela donne la même erreur. Où je me trompe et comment y remédier?
Change ça:
user = models.ForeignKey('User', unique=True)
pour ça:
user = models.ForeignKey(User, unique=True)
Exactement en Django 1.5 le AUTH_USER_MODEL
setting a été introduit , permettant d'utiliser un modèle utilisateur personnalisé avec le système d'authentification.
Si vous écrivez une application destinée à fonctionner avec des projets sur Django 1.5 à 1.10 et versions ultérieures, c'est la bonne façon de référencer le modèle utilisateur (qui peut maintenant être différent de Django.contrib.auth.models.User
):
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
Dans le cas où vous écrivez une application réutilisable prenant en charge Django 1.4 également, alors vous devriez probablement déterminer la référence à utiliser en vérifiant la version Django, peut-être comme ceci :
import Django
from Django.conf import settings
from Django.db import models
def get_user_model_fk_ref():
if Django.VERSION[:2] >= (1, 5):
return settings.AUTH_USER_MODEL
else:
return 'auth.User'
class UserProfile(models.Model):
user = models.ForeignKey(get_user_model_fk_ref())