django - 带有自定义字段表单的 ModelForm 的 UpdateView
问题描述
我有两个模型
Model A:
fieldA1
fieldA2
Model B:
fieldA = ForeignKey(A)
fieldB1
fieldB2
我需要创建 ModelFormB 但我还需要通过表单向 Model B 插入值。所以我创造
ModelForm B:
fielda1 = form.CharField()
fielda2 = form.CharField()
class Meta:
model = ModelB
field = [fielda1, fielda2, fieldb1, fieldb2]
亩更新查看代码:
class ModelBUpdateView(LoginRequiredMixin, UpdateView):
model = ModelB
form_class = ModelFormB
template_name = "....."
success_url = reverse_lazy('...')
问题是,在模板中我只能看到 ModelB(fieldb1,fieldb2) 实例初始值,但 fielda1 和 fielda2 完全空白。
如何在 updateview 期间将值发送到 fielda1 和 fielda2?
解决方案
默认情况下,UpdateView 只会更新单个模型。您可以在保存模型 B 时覆盖 get_initial() 和 form_valid() 以更新模型 A。
class ModelBUpdateView(LoginRequiredMixin, UpdateView):
model = ModelB
form_class = ModelFormB
template_name = "....."
success_url = reverse_lazy('...')
def get_initial(self):
initial = super().get_initial()
initial['fielda1'] = self.object.fieldA.fieldA1
initial['fielda2'] = self.object.fieldA.fieldA2
return initial
def form_valid(self, form):
response = super().form_valid(form)
form.instance.fieldA.fieldA1 = form.cleaned_data['fielda1']
form.instance.fieldA.fieldA2 = form.cleaned_data['fielda2']
form.instance.fieldA.save()
return response
推荐阅读
- java - Java 格式时间戳
- javascript - Nuxt Js - 在初始页面加载期间仅加载一次脚本
- python - 未定义 wsgi 应用程序名称“BASE_DIR”
- scripting - 使用相同图像构建多个服务器 - 一个不会运行特定的 crontab 行
- python - 使用 Python 获取字符串、拆分然后加入
- dart - Dart 从不可编辑的大文件中读取 json 对象
- google-cloud-platform - 将 zip 上传到 GCP jupyterlab 超级慢
- javascript - 计时器反应 + Redux。React 不要通过 ComponentDidMount 中的计时器(SetInterval)分派动作
- c# - C# System.Timers.Timer 类已用事件和定时器的一般注意事项
- c# - 在 swagger 中为 web api 中的特定版本添加 Bearer token 选项