2017-04-13 53 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'] 

在這裏,我試圖通過殼與它交互:

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的子類,它可以定義用戶名和電子郵件字段等等。