Страница регистрации пользователя использует (contrib.auth.models User), но сталкивается с ошибкой Not Null Constraint - PullRequest
0 голосов
/ 29 января 2020

Я первый на Django. Я делаю регистрационную форму только для того, чтобы выполнить ограничение NOT NULL не удалось: blog_userprofile.user_id. Я пытался понять, но я не могу. Спасибо за любую помощь:)

Это мой файл models.py

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.PROTECT,blank=True)

    def __str__(self):
        return self.user.name

Это мой файл forms.py

from django import forms
from .models import Post,Comment,UserProfile
class UserProfileForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    username = forms.CharField(max_length=200)
    email = forms.EmailField()

    class Meta():
        model = UserProfile
        fields = ['username','email','password']

И это мои взгляды .py file

from django.shortcuts import render
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseRedirect,HttpResponse
from django.urls import reverse_lazy,reverse
from django.views.generic import (TemplateView,ListView,DetailView)
from django.views.generic.edit import CreateView,UpdateView,DeleteView
from .models import Post,Comment,UserProfile
from .forms import PostForm,CommentForm,UserProfileForm

def register(request):

    registered = False

    if request.method == 'POST':
        user_form = UserProfileForm(request.POST)
        if user_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.save()

            registered = True
            return HttpResponseRedirect(reverse('blog:user_login'))
        else:
            print('unvalid imformation')
    else:
        user_form = UserProfileForm()

    return render(request,'register/registration.html',{'user_form':user_form, 'registered':registered})

И этот комментарий показывает

IntegrityError at /signup/
NOT NULL constraint failed: blog_userprofile.user_id

1 Ответ

0 голосов
/ 29 января 2020

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

user_form = UserProfileForm(request.POST, instance=a)

Или вы можете попробовать этот код

if request.method == 'POST':
        # If you get an existing user from your database you can use  
        #user_form = UserProfileForm(request.POST, instance=a)
        user_form = UserProfileForm(request.POST)
        if user_form.is_valid():
            user = user_form.save(commit=False)
            user.set_password(user.password)
            user.save()

            registered = True
            return HttpResponseRedirect(reverse('blog:user_login'))
...