как добавить новые поля для формы регистрации django - PullRequest
0 голосов
/ 03 октября 2019

У меня было много вещей, чтобы войти в мою регистрационную форму, но я использую базовую регистрационную форму в версии django 2.2. Но я не могу этого сделать, я новичок в Django и не совсем понимаю, как добавить дополнительные поля в базовую регистрационную форму. Я пишу как этот код:

models.py

from django.db import models
from django.shortcuts import reverse
from django.conf import settings
from home.models import Locations, Levels

class User(models.Model):   
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to='static/img/profile/', blank=True)
    levels = models.ManyToManyField(Levels, verbose_name='levls')
    name = models.CharField(max_length=120, db_index=True)
    first_name = models.CharField(max_length=120, db_index=True)
    birdate = models.DateField()
    locations = models.ManyToManyField(Locations, verbose_name='locl')
    telnum = models.IntegerField(null=True)
    levelreg = models.DateTimeField(auto_now_add=True)
    levelchange = models.DateTimeField(auto_now=True)
    slug = models.SlugField(max_length=120)
    aside = models.CharField(max_length=120, unique=True)
    bside = models.CharField(max_length=120, unique=True)
    friendusers = models.CharField(max_length=120, unique=True)
    rebuy = models.IntegerField(null=True) 
    balls = models.IntegerField(null=True)
    total = models.IntegerField(null=True)
    date_pub = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return 'Profile for user {}'.format(self.user.username)

forms.py

from django.contrib.auth.models import User
from .models import Profile
from django import forms

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'name', 'first_name', 'birdate', 'telnum', 'email', 'aside',          
'bside','rebuy', 'balls', 'total')

    def clean_password2(self):
         cd = self.cleaned_data
         if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords don\'t match.')
         return cd['password2']

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('photo',)

просмотров, py

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from .forms import UserRegistrationForm, UserForm
from .models import User

def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        profile_form = UserForm(data=request.POST, files=request.FILES)

        if user_form.is_valid() and profile_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])

            new_user.save()
            new_user.refresh_from_db()

            new_profile = User.objects.create(user=new_user, 
            photo=request.FILES['photo'])
            new_profile.save()

            return render(request, 'users/login.html', {
                'new_user': new_user,
                'new_profile': new_profile
            })
    else:
          user_form = UserRegistrationForm()
          new_profile = UserForm()
       return render(request, 'users/registr.html', {
       'user_form': user_form,
       'new_profile': new_profile
       })

Это работаеткогда имя пользователя и загрузка картинок, но при вставке дополнительных полей это не работает

1 Ответ

0 голосов
/ 06 октября 2019

после добавления нового поля в ваших пользовательских моделях внесите изменения, используя следующие команды в cmd

$python manage.py makemigrations

$python manage.py migrate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...