2017-07-11 24 views
2

私のmodels.pyでは、email_listを追加してDjango Userモデルを拡張したいと考えています。Djangoモデルsave() - AttributeError: 'NoneType'オブジェクトに 'append'属性がありません

from django.contrib.postgres.fields import ArrayField 

class User(AbstractUser): 
    email_list = ArrayField(models.EmailField(max_length=100), null=True, blank=True) 
    [...] 

このemail_listは、デフォルト値として、ユーザーの電子メールを持っている必要があります。

AttributeError: 'NoneType' object has no attribute 'append' 

そしてprint(type(self.email_list))は、<type 'NoneType'>を返します。私は、私は次のエラーを取得するユーザーを追加するときに、しかし

def save(self, *args, **kwargs): 
    self.email_list.append(self.email) 
    super(User, self).save(*args, **kwargs) 

:私はこれを行うための最善の方法は、save()メソッドをオーバーライドすることであることがわかりました

ArrayFieldの何か問題がありますか?

+1

'[]'、現在あなたが 'その初期値としてNONE'を持っているにdefaultをフィールドkwargを設定してください。 – bakatrouble

+1

@backatroubleあなたは '[]'ではなく 'list'を使うべきです。 [警告](https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/fields/#django.contrib.postgres.fields.ArrayField)を参照してください。 – Alasdair

答えて

1

デフォルト値のリストなどの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/

関連する問題