0

私はDjango 1.9.2をpython 2.7.3、rest frameworkとallauthで使用しています。私はdjango.contrib.auth.models.AbstractUserから延びていると私はAbstractUserからの電子メールのフィールドを取得し、他のフィールドにデフォルトとしてそれを使用したい:Django AbstractUserを拡張し、電子メールを他のフィールドのデフォルトとして使用します

from django.contrib.auth.models import AbstractUser 


class MyUser(AbstractUser): 

    def get_email(self): 
     return self.email 

    email_from_work = models.EmailField(default=get_email()) 

しかし、私はこのコードを使用する場合、私が取得します次のエラー:

File "./behnowapp/models.py", line 48, in MyUser 
    email_from_work = models.EmailField(default=get_email()) 
TypeError: get_email() takes exactly 1 argument (0 given) 

電子メール属性を取得する方法はありますか?

答えて

1

おかげで、私もMyUserとの保存方法上書きしてきたし、代わりに自分のUserManagerを実装するので、私はデフォルトを実装していると私は必要なフィールドを追加しました:

class MyUser(AbstractBaseUser, PermissionsMixin): 

    def save(self, *args, **kwargs): 
     if not self.email_from_work: 
      self.email_from_work = self.get_email() 
     super(MyUser, self).save(*args, **kwargs) 

    def get_email(self): 
     return self.email 

    objects = UserManager() 
    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['email'] 

    username = models.CharField(
     _('username'), 
     max_length=30, 
     unique=True, 
     help_text=_('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'), 
     validators=[ 
      validators.RegexValidator(
       r'^[\[email protected]+-]+$', 
       _('Enter a valid username. This value may contain only ' 
        'letters, numbers ' 'and @/./+/-/_ characters.') 
      ), 
     ], 
     error_messages={ 
      'unique': _("A user with that username already exists."), 
     }, 
    ) 
    first_name = models.CharField(_('first name'), max_length=30, blank=True) 
    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    email = models.EmailField(_('email address'), blank=True) 
    is_staff = models.BooleanField(
     _('staff status'), 
     default=False, 
     help_text=_('Designates whether the user can log into this admin site.'), 
    ) 
    is_active = models.BooleanField(
     _('active'), 
     default=True, 
     help_text=_(
      'Designates whether this user should be treated as active. ' 
      'Unselect this instead of deleting accounts.' 
     ), 
    ) 
    date_joined = models.DateTimeField(_('date joined'), default=now) 
    email_from_work = models.EmailField(max_length=255, unique=True) 
+0

'validators.RegexValidator'のコードセクションでは、' .'、 'ñ'や' -'や '_'などの文字を持つユーザー名を作成できますか? – bgarcial

+0

"。"、 " - "、 "_"でユーザ名を作成するだけです。 Regex Expressionsをhttps://regex101.com/でオンラインでテストし、それが式に一致するかどうかを調べることができます – david

1

この目的でAbstractUserを拡張することはできません。このためにAbstractBaseUserを拡張します。これらの機能を使用する場合は、PermissionsMixinを継承してください。さらに、カスタムマネージャーを拡張してBaseUserManagerにします。

例 - オリエンテーションのためのRA123へ

class MyUser(AbstractBaseUser, PermissionsMixin): 

email = models.EmailField(max_length=255, unique=True) 


objects = MyUserManager() 

USERNAME_FIELD = 'email' 
REQUIRED_FIELDS = [] # Fields necessary for making a user 

def get_email(self): 
    return self.email 
関連する問題