完整性错误位于/accounts/regist\u save/ NOT NULL约束失败:帐户_newuser.user\u id 出错了。我写了
视图.py
def regist(request):
regist_form = RegisterForm(request.POST or None)
profile_form = ProfileForm(request.POST or None)
context = {
'regist_form': regist_form,
'profile_form': profile_form,
}
return render(request, 'registration/regist.html', context)
@require_POST
def regist_save(request):
regist_form = RegisterForm(request.POST or None)
profile_form = ProfileForm(request.POST or None)
if request.method == "POST" and regist_form.is_valid() and profile_form.is_valid():
regist = regist_form.save(commit=False)
regist.is_staff = True
regist.save()
profile = profile_form.save(commit=False)
sex = request.POST.get("sex", "")
print(1111)
print(sex)
profile.save()
else:
print(regist_form.errors)
print(profile_form.errors)
return redirect('detail')
注册表.html
<div class="form-group-lg">
<label for="id_username">Username</label>
{{ regist_form.username }}
</div>
<div class="form-group-lg">
<label for="id_email">Email</label>
{{ regist_form.email }}
</div>
<div class="form-group-lg">
<label for="id_password">Password</label>
{{ regist_form.password1 }}
</div>
<div class="form-group-lg">
<label for="id_password">Password2</label>
{{ regist_form.password2 }}
<p class="help-block">{{ regist_form.password2.help_text }}</p>
</div>
{% load static %}
<div class="form-group-lg">
<label for="birthday">Date</label>
<select id="year" class="form-control year" name="year">
<option value="">--</option>
</select>
Year
<select id="month" class="form-control month" name="month">
<option value="">--</option>
</select>
Month
<select id="day" class="form-control day" name="day">
<option value="">--</option>
</select>
Day
<br>
<br>
</div>
<div class="form-group-lg">
<label for="sex">SEX</label>
<select id="sex" class="form-control sex" name="sex">
<option value="">--</option>
<option value="male">male</option>
<option value="female">female</option>
</select>
</div>
<script src="{% static 'accounts/register.js' %}"></script>
<button type="submit" class="btn-lg regist">REGIST</button>
<input name="next" type="hidden" />
{% csrf_token %}
</form>
注册.js
$(() => {
for (let i = 1900; i < 2020; i++) {
$("#year").append(`<option value="${i}">${i}</option>`);
}
for (let i = 1; i < 12; i++) {
$("#month").append(`<option value="${i}">${i}</option>`);
}
for (let i = 1; i < 31; i++) {
$("#day").append(`<option value="${i}">${i}</option>`);
}
})
型号.py
from django.db import models
from django.contrib.auth.models import User
class NewUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthday = models.CharField(max_length=100,null=True, blank=True, default=None)
sex = models.CharField(max_length=100,null=True, blank=True, default=None)
在表单.py你知道吗
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from .models import User
from .models import NewUser
class RegisterForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'email','password1','password1',)
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['class'] = 'form-control'
self.fields['email'].widget.attrs['class'] = 'form-control'
self.fields['password1'].widget.attrs['class'] = 'form-control'
self.fields['password2'].widget.attrs['class'] = 'form-control'
class ProfileForm(forms.ModelForm):
class Meta:
model = NewUser
fields = (
"birthday", "sex"
)
我真的不明白为什么会发生这个错误,因为我没有在NewUser模型中写入用户id。我认为完整性错误意味着在Model.OneToOneField
中找不到列可以连接到user和NewUser的模型。我认为这个错误意味着我应该在新的用户模型中准备用户id,但是如果我的想法是正确的,我无法理解为什么。怎么做应该我能修好吗?我应该写什么?你知道吗
这是因为在NewUser模型中,user字段是必填字段。ProfileForm中不包括用户字段。因此,当ProfileForm试图保存没有附加用户的NewUser时,会导致上述错误。你知道吗
我们要做的是在实际保存之前将用户附加到实例:
相关问题 更多 >
编程相关推荐