Python 不保存某些字段的数据
您好,我正在尝试将新注册用户保存到数据库。除了本地用户模型外,我还有一个配置文件模型,其中包含其他字段,这是我的问题,注册后名为“性别”和“生日”的字段不会保存到数据库中,但用户和配置文件是使用相应的字段创建的 models.pyPython 不保存某些字段的数据,python,django,Python,Django,您好,我正在尝试将新注册用户保存到数据库。除了本地用户模型外,我还有一个配置文件模型,其中包含其他字段,这是我的问题,注册后名为“性别”和“生日”的字段不会保存到数据库中,但用户和配置文件是使用相应的字段创建的 models.py class Profile(models.Model): GENDER_CHOICES = [ ('male', 'Male'), ('female', 'Female'), ('other', 'Other'
class Profile(models.Model):
GENDER_CHOICES = [
('male', 'Male'),
('female', 'Female'),
('other', 'Other'),
]
user = models.OneToOneField(User, on_delete=models.CASCADE)
image_prof = models.ImageField(
default='default.jpg', upload_to='profile_pics')
gender = models.CharField(
max_length=100,
choices=GENDER_CHOICES,
default='male',)
birthday = models.DateField(name='birthday', null=True)
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm, ProfileGenderBirthdayForm
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
bg_form = ProfileGenderBirthdayForm(request.POST)
if form.is_valid():
user = form.save()
if bg_form.is_valid():
user.profile.save()
username = form.cleaned_data.get('username')
messages.success(
request, f'{username} Your account has been created! You can now log in')
return redirect('login')
else:
form = UserRegisterForm()
bg_form = ProfileGenderBirthdayForm()
context = {
'form': form,
'bg_form': bg_form}
return render(request, 'users/register.html', context)
html
{%extends“indi/base.html”%}{%load crispy_forms_tags%}{%block content%}
{%csrf_令牌%}
今天加入
{{form | crispy}}
{{bg_form|crispy}}
注册
已经有账户了吗?
{%endblock内容%}
非常感谢您从未保存过配置文件表单。应该是:
if form.is_valid() and bg_form.is_valid():
user = form.save()
profile = bg_form.save(commit=False)
profile.user = user
profile.save()
我们可以看到htmlI刚刚添加了htmlI有这样的错误..IntegrityError at/register/UNIQUE constraint失败:users\u profile.user\u idYou显然在用户上有一个自动创建配置文件的post save信号。你应该把它去掉。
if form.is_valid() and bg_form.is_valid():
user = form.save()
profile = bg_form.save(commit=False)
profile.user = user
profile.save()