【问题标题】:Django - initial value modelformDjango - 初始值模型
【发布时间】: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 :我已经提供了一些额外的信息!包括类型错误!谢谢

标签: python django model


【解决方案1】:

您将项目字段“feeder”的值分配给变量“a”而不是实际的项目实例,然后您尝试将此“a”变量(应该是项目实例)分配给 Flow 上的字段这是 Item 模型的 FK(并且应该分配 Item 的实例)。

改成

 a = Item.objects.get(slug=itemslug)

还有

class Flow(models.Model):
    feeder = models.ForeignKey(Item, default="None", on_delete=models.CASCADE)

您将文本值作为默认值分配给 ForeignKey 字段有点奇怪(这可能不仅是“奇怪的”,而且是不允许的)

你应该做更多类似的事情

class Flow(models.Model):
    feeder = models.ForeignKey(Item, null=True, blank=True, on_delete=models.CASCADE)

或符合您当前的惯例

class Flow(models.Model):
    feeder = models.ForeignKey(Item, default=Item.objects.get(feeder="None"), on_delete=models.CASCADE)

我认为您在理解 FK 关系的运作方式方面有些困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2011-11-22
    • 2013-09-11
    相关资源
    最近更新 更多