【问题标题】:Cannot assign "'1'": "Offers.state must be a "States" instance无法分配“'1'”:“Offers.state 必须是“States”实例
【发布时间】:2021-05-20 19:26:07
【问题描述】:

我已经阅读了同一个问题的多个答案,但没有一个对我有用。这是我的模型:

class States(models.Model):
    name = models.CharField(max_length=20)
    abrev = models.CharField(max_length=3)
    def __str__(self):
       return self.abrev

class Offers(models.Model):
     *other fields*
     state = models.ForeignKey(States on_delete=models.PROTECT)

所以在视图中我正在这样做:

if request.method == 'POST':
    try:
        **other fields**
        state = States.objects.get(pk=request.POST['state'])
        Offers.objects.create(**other fields**, state=state)
    except Exception as e:
        print ("error in form")

但我总是遇到同样的错误

无法分配“'1'”:“Offers.state 必须是“States”实例。

如您所见,我传递的是一个实例,而不是元素的 id。我使用来自表单的 id 来查询数据库并通过以下方式找到实例: state = States.objects.get(pk=request.POST['state'])

表单工作得很好,我尝试使用 forms.py 和 if form.is_valid() 来做,但得到了完全相同的结果。

上午: django 3.2.3 蟒蛇3.9.2

编辑** 它可以在 django 管理员中使用。

【问题讨论】:

  • 您正在重新输入代码,而不是剪切和粘贴。你确定它看起来一模一样吗?
  • 例如,如果你真的有state = request.POST['state'] / slate = States.objects.get(pk=state)(注意错字),那么你会得到你描述的结果。
  • 是的,看起来一模一样,我没有复制粘贴,因为代码太多了。
  • 尝试时会发生什么:Offers.objects.create(**other fields**, state_id=state)。这是使用调试器并查看您正在发生的事情的好案例。顺便说一句,ForeignKey 中缺少一个逗号。
  • 嗨@luisdaniel 你的问题解决了吗?

标签: python django forms instance


【解决方案1】:

在 Offers.objects.create(其他字段, state=state)

这里的其他字段是dict类型,包含模型的所有值。

在字典中添加

other_fields["created_by"] = state

other_fields["created_by_id"] = state.id

然后创建,

Offers.objects.create(**other_fields)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多