外键形式和未绑定形式问题

2024-04-27 00:27:28 发布

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

我有两个模型,UserFreelancer

#models.py
class User(AbstractBaseUser):

class Freelancer(models.Model):
    user = models.ForeignKey(User)

我有两种表格:

#forms.py
class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('email',)

class FreelanceUpdateForm(forms.ModelForm):
    class Meta:
        model = Freelancer
        fields = ('first_name', 'surname', 'university', 'biography', 'skills')

我想在同一页上同时显示这两个视图,因此我创建了一个视图:

def profile(request, pk):
    if request.method == 'POST':
        user_form = UserUpdateForm(request.POST, instance=request.user)
        freelancer_form = FreelanceUpdateForm(request. POST, instance=request.user.id)

        if all([user_form.is_valid(), freelancer_form.is_valid()]):
            user = user_form.save()
            freelancer_form = freelancer_form.save()
            return redirect(user)
    else:
        user_form = UserUpdateForm(instance=request.user)
        freelancer_form = FreelanceUpdateForm(instance=request.user.id)

    return render(request, 'freelancestudent/profile.html',{
        'user_form': user_form,
        'freelancer_form': freelancer_form,
    })

问题是我无法获得带有freelancer_form = FreelanceUpdateForm(instance=request.user.id)freelancer_form。我尝试了freelancer_form = FreelanceUpdateForm(instance=Freelancer(user_id=request.user.id))填充表,但它不会将其保存为有效,因为它没有绑定

我如何获得相关的自由职业者


Tags: instancepyformidmodelsrequestformspost
1条回答
网友
1楼 · 发布于 2024-04-27 00:27:28

为此,您需要在Freelancer.user中指定related_name才能反向访问它:

class Freelancer(models.Model):
    user = models.ForeignKey(User, related_name='freelancer')

现在,您可以使用简单的User.freelancerUser模型访问Freelancer,这样您就可以创建如下表单:

freelancer_form = FreelanceUpdateForm(request. POST, instance=request.user.freelancer)

相关问题 更多 >