2017-04-13 1 views
0

나는 자습서 수준의 지식을 넘어서 AbstractBaseUser 메타 클래스를 확장하여 내 자신의 사용자 클래스를 만들려고 노력하고 있지만 실제로이 유형과 상호 작용하는 방법을 보여주는 예제를 찾는 데 어려움을 겪고 있습니다. API를 통해 모델의 내가 쉘을 통해 상호 작용하는 것을 시도하고있다django AbstractBaseUser 클래스의 올바른 사용

from __future__ import unicode_literals 
from django.db import models 
from django.utils.translation import ugettext as _ 

class Country(models.Model): 
    iso3166 = models.CharField(_("country ISO 3166"), max_length=3, default="840", primary_key=True) 
    name = models.CharField(_("country name"), max_length=40, default="USA") 

    def __unicode__(self): 
     return self.name 

class MyUser(AbstractBaseUser): 
    postal_code = models.CharField(_("zip code"), max_length=5, blank=True, default='') 
    country = models.ForeignKey(Country)REQUIRED_FIELDS = ['country'] 

그리고 여기에 : 여기 내 모델의 내가 g을 정의 라인까지 잘 작동

from myapp.models import MyUser, Country 
from django.utils.translation import ugettext as _ 
c = Country(iso3166="840",name=_("United States of America")) 
c.save() 
q = Country.objects.get(iso3166="840") 
g = MyUser(username="bob",password="pass1",first_name="Robert",last_name="Smith",email="[email protected]",country=q) 

, 어디서 오류가 발생합니다 :

TypeError: 'username' is an invalid keyword argument for this function 

오류가 무엇인지 알 수는 있지만 신경 쓰지 않아도되지만 올바른 구문이 새로운 MyUser 개체를 만드는 데 어떤 것인지 확실하지 않습니다.

답변

1

AbstractBaseUser는 password와 last_login을 제외한 모든 필드를 정의하지 않습니다. 따라서 하위 클래스에서 정의한 필드 (postal_code 및 country) 만 전달할 수 있습니다.

실제로 이것은 거의 유용하지 않습니다. 대신 사용자 이름과 전자 메일 필드를 정의하는 대신 AbstractUser를 하위 클래스로 만들려고합니다.