首页 > 解决方案 > 无法分配“'1'”:“Offers.state 必须是“States”实例

问题描述

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

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 python 3.9.2

编辑** 它在 django 管理员中工作。

标签: pythondjangoformsinstance

解决方案


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

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

在字典中添加

other_fields["created_by"] = 状态

或者

other_fields["created_by_id"] = state.id

然后创建,

Offers.objects.create(**other_fields)


推荐阅读