【问题标题】:ValueError: Cannot assign "''": "" must be a "" instance. errorValueError:无法分配“''”:“”必须是“”实例。错误
【发布时间】:2019-11-14 03:29:18
【问题描述】:

我正在尝试创建一个对象并从输入字段分配一个外键,但我遇到了一个奇怪的错误,我尝试使用 id 分配它,名称但似乎没有任何工作,任何帮助都会非常感激。 这是模型:

class Node(MPTTModel):
    parent              = TreeForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, related_name='children')
    name                = models.TextField(blank=True, null=True)

这是表单域:

<input  type="hidden" name="parent" value="{{ current_tree }}" />

这是视图:

get_node_parent = request.POST.get('parent', '').strip()

Node.objects.create(parent=get_node_parent)

每次我尝试创建模型时,我都会收到消息说它必须是一个节点实例。

【问题讨论】:

  • 为什么这是一个奇怪的错误? parent 应该是 Node(因为它是 Node 的 fk),那么您为什么希望使用字符串?
  • 嘿,Willem,我没有使用字符串,'get_node_parent' 的输出实际上是一个节点,所以我不明白为什么会出现这个错误。
  • 但是POST本质上是一个将字符串映射到字符串的字典,所以get_node_parent是一个字符串。
  • 我认为我在这里遗漏了一些东西,你知道我如何才能实现我想要做的事情,因为我是 django 的新手并且我很难让它工作。
  • 究竟什么是{{ current_tree }},你的Node 的名字?是主键吗?

标签: django-models foreign-keys


【解决方案1】:

您的 Node 构造函数需要一个 Node 对象作为父对象。由于您的parent 包含该.nameNode 字段,因此您首先需要获取该节点,例如:

parent_name = request.POST.get('parent')

node_parent = None
if parent_name is not None:
    node_parent = Node.objects.get(name=parent_name)

Node.objects.create(parent=node_parent)

因此,我们首先检索'parent' 的值。如果存在这样的值,我们将使用Node.objects.get(name=...) 为该名称获取给定的Node。然后我们可以使用给定的name 创建新的Node

请注意,您可能还想设置一个名称,并将name 字段设为unique=True,否则使用name 将不足以“识别”Node 对象。

【讨论】:

  • 感谢您的回答,这正是我所缺少的。否则我已经使用 id 查询了 node_parent,所以我不必将名称设置为唯一的 true。
猜你喜欢
  • 2018-06-03
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多