我试图通过扩展AbstractBaseUser元类来超越教程级知识并创建我自己的用户类,但是我找不到实际显示如何通过这种类型的模型进行交互的示例API。这是我的模特:
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']
在这里,我试图通过shell与它进行交互:
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="bob@here.net",country=q)
哪个工作正常,直到我定义g的行,从而得到错误:
TypeError: 'username' is an invalid keyword argument for this function
我得到了错误所说的内容并且不介意,但我不确定创建新的MyUser对象的正确语法是什么。
答案 0 :(得分:1)
AbstractBaseUser没有定义自己的任何字段(除了password和last_login)。因此,您只能传递您在子类中定义的字段:postal_code和country。
在实践中,这很少有用;你可能想要继承AbstractUser,它确实定义了用户名和电子邮件字段等。