Django : 인증 사용자를 모델로 가져 오기


83

한 가지 문제가 있습니다. Django에서 새로운 모델을 만들었습니다.

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

하지만 작동하지 않습니다. ImportError: cannot import name user

그것을 고치는 방법?

그래서 db에 OneToOne"auth_user"테이블과 관계 가있는 새 테이블 "workers"를 만들고 싶습니다 . 감사.

답변:


194
from django.contrib.auth.models import User

모델을 놓쳤으며 사용자는 대문자로 표시됩니다.

사용자 지정 사용자 모델을 사용하는 경우 다음을 사용해야합니다.

from django.contrib.auth import get_user_model
User = get_user_model()

자세한 내용은 문서 에서 찾을 수 있습니다 .

Django 1.11에서 변경 :

가져 오기 시간에 get_user_model ()을 호출하는 기능이 추가되었습니다.


고마워하지만 django의 문서에서 모델 docs.djangoproject.com/en/dev/ref/contrib/auth BTW 다시 감사드립니다.
BlaShadow 2013

74

사용자 지정 사용자 모델을 사용하는 경우 다음을 수행하여 참조하십시오.

from django.contrib.auth import get_user_model
User = get_user_model()

또는 외래 키 또는 다 대다 관계에서 사용하는 경우 :

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

문서


6
이식성이 더 높기 때문에 허용되는 답변보다 더 정확합니다.
Will

3

AUTH_USER_MODEL좋은 해결책입니다. 여기에 질문에 따른 완전한 솔루션이 있습니다.

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

코드를 일반적으로 유지 하려면 인증 사용자 모델을 직접 참조하는 대신 사용자 모델과 모델의 관계를 정의 할 때 참조 하는 get_user_model()방법과 사용자 모델을 검색 하는 방법을 사용합니다 AUTH_USER_MODEL.

ref : 예제 북의 장고

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.