0

Django 1.9.2'yi python 2.7.3, dayanak çerçevesi ve allauth ile kullanıyorum. Ben django.contrib.auth.models.AbstractUser uzanan ve ben AbstractUser eposta alanını almak istiyorum ve diğer alanda varsayılan olarak kullanmak: Bu kodu kullandığınızda Ama olsunDjango Özgeçmişini genişletin ve e-postayı alan diğer alanlarda varsayılan olarak kullanın

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()) 

izleyen hata:

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) 

E-posta özelliğini almanın yolu nedir?

cevap

1

sayesinde ben de MyUser ait tasarruf yöntemi üzerine gelmiş ve bunun yerine kendi UserManager uygulanması, ben varsayılan uygulamış ve ben gerekli alanları ekledik:

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' '-' ve '_' gibi' .',' n 'veya karakterli bir adı oluşturmak sağlar 'kod bölümü? – bgarcial

+0

Sadece ".", "-", "_" ile bir kullanıcı adı oluşturmanıza izin verir. Regex İfadelerini https://regex101.com/ ile online olarak test edebilir ve ifadeyle eşleşip eşleşmediğini kontrol edebilirsiniz. – david

1

Bu amaç için AbstractUser ürününü genişletemezsiniz. Bunun için AbstractBaseUser'u uzatın. Bu özellikleri kullanmak istiyorsanız, PermissionsMixin numaralı makaleye bakın. Ayrıca BaseUserManager'u genişleten özel bir yönetici yapın.

Örnek - yönlendirme için RA123 için

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