web-dev-qa-db-fra.com

Django: importer un utilisateur autorisé dans le modèle

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.

77
tim
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.

176
Thomas Schwärzl

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)

docs

64
Cianan Sims

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
1
Simplans

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

1
harishkb