Django初始值模型

2024-10-03 21:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用来自另一个模型(项)的数据来修复一个模型表单(模型流)的初始值。虽然这似乎不管用。作为一个例子,喂入器需要由模型流提供燃料,我有这样的印象。我怎么解决这个问题

谢谢大家

型号.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)

(…)

视图.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”实例


Tags: instancepy模型modelifmodelsrequestcreate
1条回答
网友
1楼 · 发布于 2024-10-03 21:32:49

您正在将项目字段“feeder”的值赋给变量“a”,而不是实际的项目实例,然后尝试将此“a”变量(应为项目实例)赋给流上的字段,流上的字段是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的关系上有点困难

相关问题 更多 >