Django没有正确更新SQLite表

时间:2016-07-27 16:59:20

标签: python django sqlite

我一直致力于一个涉及使用Django和AngularJS的身份验证页面的项目。我创建了一个User类的扩展版本,并添加了" company"和" phone_number"作为领域。

这是我的models.py代码:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models
from django.core.validators import RegexValidator




class AccountManager(BaseUserManager):
    def create_user(self, email, password=None, **kwargs):
       if not email:
           raise ValueError('Users must have a valid email address')

       #if not kwargs.get('username'):
           #raise ValueError('Users must have a valid username')

       #if access_code not in ['password']:
           #raise ValueError('Sorry you are not eligible to join')

       account = self.model(
           email=self.normalize_email(email))

       account.set_password(password)
       account.save()

       return account

   def create_superuser(self, email, password, **kwargs):
       account = self.create_user(email, password, **kwargs)

       account.is_admin = True
       account.save()

       return account


class Account(AbstractBaseUser):
   email = models.EmailField(unique=True)

   first_name = models.CharField(max_length=40, blank=False)
   last_name = models.CharField(max_length=40, blank=False)
   company = models.CharField(max_length=40, blank=False)
   phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
   phone_number = models.IntegerField(validators=[phone_regex], blank=False, null=True)  # validators should be a list
   # access_code = models.CharField(max_length=40, blank=False, default='SOME STRING')

   is_admin = models.BooleanField(default=False)

   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

   objects = AccountManager()

   USERNAME_FIELD = 'email'
   REQUIRED_FIELDS = ['first_name', 'last_name', 'company', 'phone_number']

   def __unicode__(self):
       return self.email

   def get_full_name(self):
       return ' '.join([self.first_name, self.last_name])

   def get_short_name(self):
       return self.first_name

现在当我去终端并执行python manage.py createsuperuser时,弹出所有字段选项以输入文本。但是,当我之后检查数据库时,只更新了电子邮件和密码字段。公司,电话号码,名字和姓氏返回为' '

任何线索我做错了什么?我花了太多时间来解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

create_user中,您尚未通过self.model来电的任何其他参数,因此您只需设置电子邮件,稍后再设置密码。你也需要在那里传递kwargs。

  account = self.model(email=self.normalize_email(email), **kwargs)