1048, «Столбец user_id не может быть нулевым» - PullRequest
2 голосов
/ 28 февраля 2020

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    fullname = models.CharField(max_length=30,blank=False,null=False)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    gender = models.CharField(max_length=10,blank=True)

    def __str__(self):
        return self.fullname

forms.py

class UserForm(forms.ModelForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'validate','placeholder': 'Enter Username'}))
    password= forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Enter Password'}))
    email=forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Enter Email'}))
    password2 = None

    class Meta:
        model=User
        fields=['username','password','email']


class ProfileForm(forms.ModelForm):
    fullname = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Enter fullname'}))
    class Meta:
        model=Profile
        fields=['fullname']

views.py

def register(request):
    if request.method =='POST':
        form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if form.is_valid() and profile_form.is_valid():
            variable=form.save(commit=False)
            variable.password = pbkdf2_sha256.encrypt(request.POST['password'],rounds=12000,salt_size=32)
            variable.save()
            profile=profile_form.save(commit=False)
            profile.username=variable.username
            profile.save()
            username = form.cleaned_data.get('username')
            messages.success(request,f'account created for { username }')
            return redirect('login')
    else:
        form = UserForm()
        profile_form = ProfileForm()
    context={'form':form , 'profile_form':profile_form}
    return render(request, 'users/register.html',context)

Я создал две таблицы auth_user (по умолчанию) и users_profile .При регистрации пользовательские данные по умолчанию попадают в таблицу аутентификации, но полное имя не вставляется в user_profile.

1 Ответ

2 голосов
/ 28 февраля 2020

Вы не связали profile.user с User объектом. Вы можете сделать это с помощью:

def register(request):
    if request.method =='POST':
        form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if form.is_valid() and profile_form.is_valid():
            variable=form.save(commit=False)
            variable<b>.set_password(</b>variable.password<b>)</b>
            variable.save()
            profile=profile_form.save(commit=False)
            <b>profile.user = variable</b>
            profile.save()
            username = form.cleaned_data.get('username')
            messages.success(request,f'account created for { username }')
            return redirect('login')
    # &hellip;

Чтобы установить пароль, вам, вероятно, лучше использовать Django s .set_password(..) method [Django -doc ] .

...