django - 创建表单以从相关模型的表单更改关系
问题描述
我有两个模型:
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())
也许有更好的方法。
解决方案
推荐阅读
- java - 在图表视图中将日期显示为 X 轴不起作用(每次都显示相同)
- mysql - "sqlMessage": "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用
- json - jq 将数组中的多个对象合并为一个
- amazon-web-services - 为什么我需要 AWS CloudFormation 中的额外元素来插值变量
- r - 如何将自定义变量名称添加到 IRF 图中?
- angular - '"subscriptionKey"' 不可分配给类型 'AuthenticationType'。带有 AngularJ 的 Azure 地图
- vba - 使用vba访问ms access中的字段
- kotlin - LiveData Observer UninitializedPropertyAccessException:lateinit 属性 siteDto 尚未初始化
- assembly - 为什么在汇编语言的实际输出之前打印额外的字符?
- android - 改造调用请求只接收消息部分,不接收正文部分