2016-08-02 7 views
0

Я хотел бы сделать auth_user_model логин, но мне нужно войти в систему с помощью Email и Password. Поэтому я думал, что смогу это сделать, если я смогу сохранить значение электронной почты в поле «имя пользователя».Django auth_user_model

class HeepooUser(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

    phone = models.CharField(max_length=15, null=True) 
    allow_phone = models.BooleanField(default=False) 
    school = models.ForeignKey(School) 
    date_join = models.DateTimeField(auto_now_add=True) 


def register(request): 
    registered = False 

    if request.method == 'POST': 
     user_form = UserForm(request.POST) 
     profile_form = RegisterForm(request.POST) 

     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save(commit=False) 
      user.set_password(user.password) 
      user = user_form.save() 

      profile = profile_form.save(commit=False) 
      profile.user = user 
      profile = profile_form.save() 

      registered = True 
      return HttpResponseRedirect("/books/") 
     else: 
      return HttpResponse('Wrong access1') 

    else: 
     user_form = UserForm() 
     profile_form = RegisterForm() 

    return render(request, "register.html", { 
     'user_form': user_form, 
     'profile_form': profile_form, 
     'registered': registered, 
}) 

forms.py

class UserForm(forms.ModelForm): 
    email = forms.EmailField(max_length=50, required=True, 
         widget=forms.TextInput(attrs={'class':'form-control', }), 
) 
    password = forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model = User 
     fields = ('email', 'password',) 


class RegisterForm(forms.ModelForm): 
    class Meta: 
     model = HeepooUser 
     exclude = ('allow_phone', 'user',) 

Register.html

<form action="" method="post"> 
     {% csrf_token %} 
     {{ user_form.as_p }} 
     {{ profile_form.as_p }} 
     <input type="submit" value="Register"> 
    </form> 

Не могли бы вы мне помочь? Спасибо!

ответ

0

Вы можете запросить электронную почту вместо имени пользователя пользователю в вашей форме входа, чтобы использовать его для регистрации, а затем просто сгенерируйте имя пользователя для этого пользователя, вы можете сделать это, используя свой адрес электронной почты или имя.

EDIT: Вам нужно только создать имя пользователя. Предположим, что вы запрашиваете имя и фамилию для пользователя. Давайте создадим метод его создания.

def generate_username(first_name, last_name): 
     username = '%s.%s' % (first_name.lower(), last_name.lower()) 
     username = '{:.29}'.format(username) 
     counter = User.objects.filter(first_name=first_name,last_name=last_name).count() 
     if counter > 0: 
      username += '%s' % (counter + 1) 
     return username 

Тогда вы можете использовать его на свой взгляд.

 user = user_form.save(commit=False) 
     user.set_password(user.password) 
     user.username = generate_username(first_name, last_name) 
     ..... 

Если вы не хотите запрашивать имя или фамилию, вы можете сгенерировать имя пользователя, используя его электронную почту.

+0

Я добавил forms.py. Не могли бы вы сообщить мне, как я могу изменить? – MrKarl

+0

@MrKarl проверить это. – levi

Смежные вопросы