在我的models.py
中,我希望通过添加email_list来扩展Django用户模型。
from django.contrib.postgres.fields import ArrayField
class User(AbstractUser):
email_list = ArrayField(models.EmailField(max_length=100), null=True, blank=True)
[...]
此email_list必须将用户电子邮件设为默认值。我发现最好的方法是覆盖save()
方法:
def save(self, *args, **kwargs):
self.email_list.append(self.email)
super(User, self).save(*args, **kwargs)
但是,当我添加用户时,我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'append'
print(type(self.email_list))
,返回<type 'NoneType'>
ArrayField
有什么问题?
答案 0 :(得分:1)
您应该使用list等callabe作为默认值。
from django.contrib.postgres.fields import ArrayField
class User(AbstractUser):
email_list = ArrayField(models.EmailField(max_length=100), null=True, blank=True, default=list)
[...]
https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/fields/
答案 1 :(得分:0)
发生初始的None值是因为null = True,即使default = list也是如此。 为避免覆盖默认值,请删除或将null设置为False
from django.contrib.postgres.fields import ArrayField
class User(AbstractUser):
email_list = ArrayField(models.EmailField(max_length=100), blank=True, default=list)
[...]