django - 使用(contrib.auth.models用户)的用户注册页面,但面临“非空约束错误”

标签 django authentication error-handling model notnull

我是第一个使用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']

这是我的views.py文件
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

最佳答案

如果您从数据库中获得现有用户,则可以使用

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

关于django - 使用(contrib.auth.models用户)的用户注册页面,但面临“非空约束错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969018/

相关文章:

django admin 如何限制选择框的值

django - 多个域,多个 django 项目,一台服务器

.net - mvc windows 身份验证允许域中的所有用户

android - 未调用 Firebase 自定义 token 身份验证回调

visual-studio - 为 Unity 5.3.1f1 安装 Visual Studio 2015 工具时出错

python - 如何修复Python中的 “TypeError: string indices must be integers”错误

python - django 中是否有默认模板变量列表?

python - Django/Postgres : FATAL: remaining connection slots are reserved for non-replication superuser connections

Android:由于 Facebook 登录,应用程序在启动时崩溃?

error-handling - 如何在不使用 LISP 中的 remove 函数的情况下从列表中删除元素