在"创建超级用户" python manage.py syncdb
的步骤,我希望能够指定
我的用户模型"是:
class Account(auth_models.AbstractBaseUser):
email = models.EmailField(unique = True, db_index = True)
created_on = models.DateField(auto_now_add = True)
person = models.ForeignKey(Person)
def get_full_name(self):
...
def get_short_name(self):
...
objects = AccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
和Person
模型是:
class Person(models.Model):
name = models.CharField(max_length = 256)
is_staff = models.BooleanField(default = False)
phone = models.CharField(max_length = 16, blank = True)
我的自定义帐户"经理"自然需要拥有所有这些信息,所以我做的是:
def create_user(self, email, password, name, phone):
normalized_email = self.normalize_email(email)
person = Person(
name = name,
phone = phone
)
person.save()
account = Account(email = normalized_email, person = person)
account.set_password(password)
account.save()
return account
在创建过程中,它只会询问我有关电子邮件和密码的信息,同时完全忽略了需要填充的Person
模型。
如何创建它以便在"创建超级用户"中创建所有6个字段。步骤
对于那些将Account
和Person
分开的想法的人:单个Person
可以有多个Account
与之关联;它被称为"一对多关系"在Person
和Account
之间;这完全合法,请与您的律师核实。
我尝试将person
添加到REQUIRED_FIELDS
但是,正如documentation中指定的那样:
由于在createsuperuser提示符期间无法传递模型实例,因此期望用户输入现有实例的to_field值(默认情况下为primary_key)。
需要Person
ID,我没有(我需要先创建此人)。
指定:
REQUIRED_FIELDS = ['person.name', ...]
不受支持(错误说person.name
不是Account
的字段。)
答案 0 :(得分:0)
您需要一个名为create_superuser()
的方法,如下所示:
def create_superuser(self, email, password, name, phone):
user = self.create_user(
email=email,
password=password,
name = name,
phone = phone
)
user.save(using=self._db)
return user
这种方式REQUIRED_FIELDS = ['person']
对我有用。