Django模型save() - AttributeError:' NoneType'对象没有属性'追加'

时间:2017-07-11 12:49:06

标签: python django django-models

在我的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有什么问题?

2 个答案:

答案 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)
[...]