Python 沿着用户条目django创建扩展条目

Python 沿着用户条目django创建扩展条目,python,django,forms,Python,Django,Forms,嗨,谢谢你的帮助 我有下面的代码,当“user\u profile”部分被注释掉时,它将创建一个新用户。我只是想给用户添加扩展字段。我想我很接近,但我有点迷路了。正确的做法是什么 现在,当我不加注释地运行它时,我得到了这个错误 UNIQUE constraint failed: slug_trade_app_userprofile.user_id 需要明确的是,在单击“提交”之前,数据库中不存在该用户 views.py def signup(request): if request.meth

嗨,谢谢你的帮助

我有下面的代码,当“user\u profile”部分被注释掉时,它将创建一个新用户。我只是想给用户添加扩展字段。我想我很接近,但我有点迷路了。正确的做法是什么

现在,当我不加注释地运行它时,我得到了这个错误

UNIQUE constraint failed: slug_trade_app_userprofile.user_id
需要明确的是,在单击“提交”之前,数据库中不存在该用户

views.py

def signup(request):

if request.method == 'POST':

    user_form = UserForm(request.POST)
    profile_form = UserProfileForm(request.POST)

    if user_form.is_valid():

        if user_form.is_valid():
            print("1")
            #user
            created_user = user_form.save(commit=False)
            created_user.username = created_user.email
            created_user.set_password(created_user.password)
            created_user.save()
            print("2")

            #extended profile
            created_profile = profile_form.save(commit=False)
            created_profile.user = created_user
            created_profile.save()
            print("3")
models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_picture = models.ImageField(upload_to='static/profile_pictures', blank=True )
    bio = models.TextField(max_length=500, blank=True)
    on_off_campus = models.CharField(max_length=3,
                            default="on",
                            choices=CAMPUS_STATUS)
下面是我尝试的另一种方法。我想用更正确的方法来做,但两种方法都可以。我在两方面都犯了同样的错误

def signup(request):

if request.method == 'POST':

    user_form = UserForm(request.POST)
    profile_form = UserProfileForm(request.POST)

    if user_form.is_valid():


        # create user
        username = request.POST['email']
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        email = request.POST['email']
        password = request.POST['password1']

        user = User.objects.create_user(username=username,
                            first_name=first_name,
                            last_name=last_name,
                            email=email,
                            password=password)

        #extended
        bio = request.POST['bio']
        on_off_campus = request.POST['on_off_campus']

        user_profile = UserProfile.objects.create( user=user,
                            bio=bio,
                            on_off_campus=on_off_campus)

既然您更改了整个代码段,您还可以修复缩进吗。。。。。。。。。。