/accounts/register/NOT NULL约束处的IntegrityError失败:accounts\u profile.user\u id

2024-04-20 13:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好:)我尝试在我的应用程序中添加一个配置文件用户。目标是在创建帐户的同时创建一个配置文件。但是这个错误来了:

积分错误位于/账户/注册/ 非空约束失败:帐户\u配置文件。用户\u id 我不明白我的代码有什么问题,因为我在youtube上有一个教程,里面有这个代码

这是我的密码:

views.py

from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.forms import UserCreationForm from django.contrib import messages from .forms import UserForm, ProfileForm # Create your views here. def register(request): if request.method == 'POST': form = UserCreationForm(request.POST) profile_form= ProfileForm(request.POST) if form.is_valid() and profile_form.is_valid(): user = form.save(commit=False) profile = profile_form.save(commit=False) profile.user = user user.save() profile.save() return redirect('account:login') else: form = UserCreationForm() profile_form = ProfileForm() context = { 'form' : form , 'profile': profile_form, } return render(request, 'accounts/register.html', context)

models.py:

from django.db import models from django.contrib.auth.models import User # Create your models here. class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') birthday = models.DateField() mail = models.EmailField(max_length=254, null = True, blank = True) def __str__(self): return self.user.username

forms.py:

from django import forms from django.contrib.auth.forms import AuthenticationForm, UserCreationForm from django.contrib.auth.models import User from .models import Profile class LoginForm(AuthenticationForm): username= forms.CharField(label='Username', widget=forms.TextInput(attrs={'class':'form-control', })) password= forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class':'form-control', })) class UserForm(UserCreationForm): class Meta : model = User fields =('username','password1', 'password2') class ProfileForm(forms.ModelForm): birthday= forms.DateField(label='birthday',widget=forms.DateInput(attrs={ 'class':'form-control', 'type' :'date', })) class Meta : model = Profile fields =('birthday', 'mail')

Tags: djangofromimportformauthmodelsrequestsave
2条回答

尝试:

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from .forms import UserForm, ProfileForm
# Create your views here.

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        profile_form= ProfileForm(request.POST)

        if form.is_valid()  and profile_form.is_valid():
            user = form.save(commit=False)
            user.save()

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

            profile.save()

            return redirect('account:login')

    else:
        form = UserCreationForm()
        profile_form = ProfileForm()


    context = {
     'form' : form ,
     'profile': profile_form,
    }

    return render(request, 'accounts/register.html', context)

在your views.py中,您正在创建一个配置文件对象,并在保存用户对象之前为其指定一个用户

试试这个:

...

if form.is_valid()  and profile_form.is_valid():

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

            return redirect('account:login')
...

相关问题 更多 >