首页 > 解决方案 > 创建表单以从相关模型的表单更改关系

问题描述

我有两个模型:

class Thing(forms.ModelForm):    

class Owner(forms.ModelForm):
    thing = models.OneToOneField(Thing)

我想添加一个表单来更改 Thing 的 UpdateView 中的所有者。我可以这样做:

class ThingForm(forms.ModelForm):
    owner = forms.ModelChoiceField(
        queryset=Owner.objects.all(),
    )

    class Meta:
        model = Thing
        fields = '__all__'

然后在form_valid()方法内部处理结果。但是没有更直接的方法吗,我只是将它添加到fields表单中?

更新

所以我最终这样做了:

class ThingUpdateView(UpdateView):
    model = Thing
    form_class = ThingForm

    def get_initial(self):
        initial = super(ThingUpdateView, self).get_initial()
        try:
            initial['owner'] = self.object.owner
        except Thing.owner.RelatedObjectDoesNotExist:
            pass
        return initial

    def form_valid(self, form):
        self.object = form.save(commit=False)
        owner = form.cleaned_data['owner']
        owner.thing = self.object
        owner.save(update_fields=['thing'])
        self.object.save()
        return redirect(self.object.get_absolute_url())

也许有更好的方法。

标签: django

解决方案


推荐阅读