J'ai un problème. Dans Django j'ai créé un nouveau modèle:
from Django.db import models
from Django.contrib.auth import user
class Workers(models.Model):
user = models.OneToOneField(User, primary_key=True)
work_group = models.CharField(max_length=20)
card_num = models.IntegerField()
def __unicode__(self):
return self.user
Mais ça ne marche pas: ImportError: cannot import name user
Comment le réparer?
Donc, je veux créer une nouvelle table "workers" dans la base de données, qui a une relation OneToOne
avec la table "auth_user". Merci.
from Django.contrib.auth.models import User
Vous avez manqué les modèles - et l'utilisateur est en majuscule.
Si vous utilisez un modèle d'utilisateur personnalisé, vous devez utiliser:
from Django.contrib.auth import get_user_model
User = get_user_model()
Plus de détails peuvent être trouvés dans le docs .
modifié dans Django 1.11:
La possibilité d'appeler get_user_model () au moment de l'importation a été ajoutée.
Si vous utilisez un modèle utilisateur personnalisé, procédez comme suit pour le référencer:
from Django.contrib.auth import get_user_model
User = get_user_model()
Ou si vous l'utilisez dans une clé étrangère ou dans des relations plusieurs à plusieurs:
from Django.conf import settings
....
user = models.ForeignKey(settings.AUTH_USER_MODEL)
AUTH_USER_MODEL
est une bonne solution. voici la solution complète selon la question.
from Django.db import models
from Django.conf import settings
class Workers(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
work_group = models.CharField(max_length=20)
card_num = models.IntegerField()
def __unicode__(self):
return self.user.id
Afin de garder votre code générique, utilisez la méthode get_user_model()
pour récupérer le modèle utilisateur et le AUTH_USER_MODEL
paramètre permettant de s'y référer lors de la définition des relations du modèle avec le modèle utilisateur, au lieu de se référer directement au modèle utilisateur autorisé.
ref: Django Par Exemple Réserver