【发布时间】: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