python - Django - 初始值模型
问题描述
我想使用来自另一个模型(项目)的数据来修复模型表单(模型流)的初始值。虽然这似乎不起作用。由于 instance_cf.feeder 需要由模型 Flow 提供动力,我有这样的印象。我该如何解决这个问题?
谢谢大家
模型.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”实例。
解决方案
您正在将 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 关系的运作方式方面遇到了一些麻烦。
推荐阅读
- c# - 在运行时将数据传递给谷歌图表
- graphql - 如何从端点生成graphql查询
- javascript - 在 react-native 中使用 swipeout 将函数从父容器传递到子容器
- node.js - 通过 Chromium 中的“您的连接不是私有的”页面
- javascript - 无法使用 \n 插入换行符
- php - 用 PHP 转换 unicode 字符串
- gradle - 在 gradle 的 buildscript 部分使用第三方库
- pandas - numpy 数组的维度不匹配
- c# - 在 C# 中自动创建类的实例
- asp.net-core - Itext7 将 html 转换为 pdf (asp.net core 2.1) 得到错误“无法访问关闭的流”