python - Django for 循环保存实例
问题描述
我有一个表单,它有两个输入字段,它们返回必须解析并添加到数据库中的 id 值。
这是代码
if form_stage_1.is_valid() and form_stage_2.is_valid():
# GET the new TP to pass to the next instance
form_stage_1.instance.created_by = self.request.user
new_tp = form_stage_1.save()
# Parse and add suppliers to the TP
for supplier_id in request.POST["supplier"]:
form_stage_2.instance.counterpart = Counterpart.objects.get(pk=supplier_id)
form_stage_2.instance.side = 1
form_stage_2.instance.save()
form_stage_2.instance.transaction_proposal.add(new_tp)
# Parse and add clients to the TP
for client_id in request.POST["client"]:
form_stage_2.instance.counterpart = Counterpart.objects.get(pk=client_id)
form_stage_2.instance.side = 2
form_stage_2.instance.save()
form_stage_2.instance.transaction_proposal.add(new_tp)
messages.success(request, "TP created successfully".format())
return redirect("add-tp")
不幸的是只添加了一个客户端..为什么 form_stage_2.instance.save() 只工作一次?
什么是最合适的方式
解决方案
首先,你有两张表格要填写吗?
反正,
for supplier_id in request.POST["supplier"]:
form_stage_2.instance.counterpart = Counterpart.objects.get(pk=supplier_id)
form_stage_2.instance.side = 1
form_stage_2.instance.save()
form_stage_2.instance.transaction_proposal.add(new_tp)
这行不通。我相信你不能多次保存表单实例。
if form_stage_1.is_valid() and form_stage_2.is_valid():
form_stage_1.instance.created_by = self.request.user
new_tp = form_stage_1.save()
# Parse and add suppliers to the TP
for supplier_id in request.POST["supplier"]:
data = {
'counterpart':Counterpart.objects.get(pk=supplier_id),
'side':1
'transaction_proposal':[new_tp]
}
stage2_instance = Stage2ModelClass.objects.create(**data)
# Parse and add clients to the TP
for client_id in request.POST["client"]:
data = {
'counterpart':Counterpart.objects.get(pk=client_id),
'side':2
'transaction_proposal':[new_tp]
}
stage2_instance = Stage2ModelClass.objects.create(**data)
messages.success(request, "TP created successfully".format())
return redirect("add-tp")
解决方案可能有点像这样。您可以使用,
for client_id in request.POST["client"]:
data = {
'counterpart':Counterpart.objects.get(pk=client_id),
'side':2,
'transaction_proposal':[new_tp]
}
form = FormClassStage2(data)
if form.is_valid():
form.save()
但我认为您不需要在这里初始化表单。
推荐阅读
- angular - 具有更多数据绘制连续性的连续更新高图不可见,因此我们需要在图表中心保持连续性
- python - 插入多行时,Pandas dataframe.to_sql 会削减部分文本值
- c# - 如果有人试图修改书签文本,如何完全删除书签
- python - 将 DataFrame 写入 SQL 数据库 (Oracle)
- php - 将 sh+perl 脚本转换为 php 脚本
- excel - vba 从不规则列复制和粘贴
- typescript - 打字稿解构和隐式任何
- java - 如何修复 FasterXml Jackson 中的“属性的 getter 定义冲突”错误?
- java - 使用 thymeleaf 同时迭代两个列表
- r - 按 x 轴重新排序的 Rbokeh 条形图