【发布时间】:2019-08-26 15:00:31
【问题描述】:
我想使用来自另一个模型(项目)的数据来修复模型表单(模型流)的初始值。虽然这似乎不起作用。由于 instance_cf.feeder 需要由模型 Flow 提供动力,我有这样的印象。我该如何解决这个问题??
谢谢大家
models.py:
class Item(models.Model):
feeder = models.CharField(max_length=100)
(...)
class Flow(models.Model):
feeder = models.ForeignKey(Item, default="None", on_delete=models.CASCADE)
(...)
views.py:
def create_flow(request, itemslug):
a = Item.objects.get(slug=itemslug).feeder
if request.method == 'POST':
cf = FlowForm(request.POST)
if cf.is_valid():
instance_cf = cf.save(commit=False)
instance_cf.feeder = a
instance_cf = cf.save()
messages.success(request, 'Flow successfully added!')
return redirect('items:create_flow', itemslug =itemslug)
else:
cf = FlowForm()
return render(request, 'items/create_flow.html', {'cf': cf})
错误信息:
无法分配“'XXXX'”:“Flow.feeder”必须是“Item”实例。
【问题讨论】:
-
您的问题不清楚。您没有在此代码中的任何位置设置任何初始值。你想设置什么值,在哪里?您提供的代码中的哪些内容不起作用?
-
instance_cf.feeder = a 不工作。问题是 Flow 模型(feeder)的属性之一需要预先固定。如果 Flow 模型中不存在明显的项目,我不能引用任何其他较旧的项目。因此我指的是另一个模型(项目模型)的相同属性
-
但是 *not working" 是什么意思?你看到了什么?请显示项目和流程的模型定义。
-
您是否希望表单最初具有项目(在您发布之前,而不是在发布之后才保存到表单中)?如果您的表格有效,这应该有效。如果您的表单无效,您可以使用“else: print(cf.errors)”之类的内容检查错误,或者 - 更好的是 - 放置断点并调试
-
嗨 daniel / amchugh :我已经提供了一些额外的信息!包括类型错误!谢谢