98 votes

Django : importation de l'utilisateur auth dans le modèle

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 ?

Je veux créer une nouvelle table "travailleurs" dans la base de données, qui a un numéro d'identification d'utilisateur. OneToOne relation avec la table "auth_user".

231voto

init3 Points 2402
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.

84voto

Cianan Sims Points 3279

Si vous utilisez un modèle d'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 des relations de type clé étrangère ou plusieurs à plusieurs :

from django.conf import settings
....
user = models.ForeignKey(settings.AUTH_USER_MODEL)

docs

5voto

Simplans Points 1573

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

3voto

harishkb Points 316

Pour que votre code reste générique, utilisez la fonction get_user_model() pour récupérer le modèle de l'utilisateur et la méthode AUTH_USER_MODEL afin 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 auth.

réf : Django par l'exemple Livre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X