Python Django OneToOne配置文件/用户关系未保存

Python Django OneToOne配置文件/用户关系未保存,python,django,authentication,django-models,django-forms,Python,Django,Authentication,Django Models,Django Forms,我正在尝试设置一个Django博客应用程序,使用从用户到配置文件模型的一对一关系来捕获模式信息,而不是默认的Django用户模型。我遇到的问题是,我的配置文件模型没有保存,尽管成功注册了用户,但我的配置文件表保持不变。 以下是我的观点: @transaction.atomic def profile_new(request): if request.method == "POST": user_form = UserForm(request.POST) p

我正在尝试设置一个Django博客应用程序,使用从用户到配置文件模型的一对一关系来捕获模式信息,而不是默认的Django用户模型。我遇到的问题是,我的配置文件模型没有保存,尽管成功注册了用户,但我的配置文件表保持不变。 以下是我的观点:

@transaction.atomic
def profile_new(request):
    if request.method == "POST":
        user_form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save(commit=False)
            profile = profile_form.save(commit=False)
            user.username = user.email
            user.set_password(user.password)
            user.save()
            profile.user = user
            profile.save()
            return redirect('profile_detail', pk=user.pk)
        else:
            messages.error(request, ('Please correct the error below.'))
    else:
        user_form = UserForm()
        profile_form = ProfileForm()
    return render(request, 'accounts/update.html', {
        'user_form': user_form,
        'profile_form': profile_form
    })
非常简单,运行时没有任何错误,只是从来没有实际保存概要文件对象。 表格如下:

from django import forms
from .models import User, Profile

class UserForm(forms.ModelForm):
    """confirm_password = forms.CharField()"""
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'password')

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('bio', 'birth_date', 'avatar', 'location')
以及配置文件的模型:

from django.db import models
from django.contrib.auth.models import User


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    bio = models.TextField(max_length=500, blank=True)
    avatar = models.ImageField(upload_to = 'avatars/', default = 'avatars/default.jpg')
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)
有人知道个人资料不保存的原因吗? 我的第二个问题是:保存和散列密码的正确方法是什么?我想我可以在表单中添加一个临时的“确认密码”字段,但我不知道如何散列和保存我获得的密码。

尝试下面的代码:

类配置文件(models.Model):
user=models.OneToOneField(user,on_delete=models.CASCADE,blank=True,null=True)
如果
user
字段为空,我认为您的配置文件表无法保存新记录

请尝试下面的代码:

类配置文件(models.Model):
user=models.OneToOneField(user,on_delete=models.CASCADE,blank=True,null=True)

如果
user
字段为空,我认为您的配置文件表无法保存新记录

user=models.OneToOneField(user,on\u delete=models.CASCADE,primary\u key=True)
应替换为
user=models.OneToOneField(user,on\u delete=models.CASCADE)
应替换为
user=models.OneToOneField(user,on\u delete=models.CASCADE,primary\u key=True)
(用户,on_delete=models.CASCADE)