python - 无法分配“'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 管理员中工作。
解决方案
在 Offers.objects.create(其他字段, state=state)
这里的其他字段是 dict 类型,包含模型的所有值。
在字典中添加
other_fields["created_by"] = 状态
或者
other_fields["created_by_id"] = state.id
然后创建,
Offers.objects.create(**other_fields)
推荐阅读
- php - 如何通过php将文件作为pdf文件的附件嵌入?
- android - 按下电源按钮后,Android 12 SplashScreen API 显示黑色
- javascript - 滚动时平滑“变换:翻译”
- python - 人脸识别项目中的dlib和人脸识别文件安装问题
- python - Python - 为什么“Pathlib.Path.touch()”附加一个“?” 到文件名
- postgresql - postgres,使用来自 jsonb 的数组生成列
- android - 通过 Retrofit2 POST 请求在 JSONObject 中获取 JSONObject
- javascript - 合并多个搜索结果 Angular 10
- git - Github 默认分支
- qt5 - 将单元测试添加到 QMake 项目而不将源移动到子目录