Django - 初始值模型

问题描述 投票:0回答:1

我想使用来自另一个Model(Item)的数据来修复modelform(模型Flow)的初始值。虽然这似乎不起作用。由于instance_cf.feeder需要由模型Flow提供燃料,因此我有印象。我怎么解决这个?

谢谢大家

models.朋友:

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.朋友:

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

python django model
1个回答
0
投票

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

改为

 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关系如何运作方面遇到了一些麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.