Django-初始值模型

时间:2019-04-04 18:44:34

标签: python django model

我想使用另一个模型(项目)的数据来确定模型形式(模型流程)的初始值。虽然这似乎不起作用。由于Model_Flow需要为instance_cf.feeder提供动力,因此给人留下了深刻的印象。我该如何解决?

感谢所有人

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”实例。

1 个答案:

答案 0 :(得分:0)

您正在将Item字段“ feeder”的值分配给变量“ a”,而不是实际的Item实例,然后尝试将此“ a”变量(应为Item实例)分配给Flow上的字段这是FK到Item的模型(并且应该为其分配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关系的工作方式时遇到了一些麻烦。