Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单值在视图中未更改_Python_Django - Fatal编程技术网

Python Django表单值在视图中未更改

Python Django表单值在视图中未更改,python,django,Python,Django,我目前正试图在views.py文件中设置foreignKey的值,但它没有改变 models.py 类项(models.Model): sht=models.ForeignKey(工作表,on_delete=models.CASCADE,blank=True,null=True) name=models.CharField(最大长度=100) amount=models.IntegerField(默认值=1) 定义(自我): 返回self.name views.py def附加项(请求,段塞)

我目前正试图在
views.py
文件中设置
foreignKey
的值,但它没有改变

models.py

类项(models.Model):
sht=models.ForeignKey(工作表,on_delete=models.CASCADE,blank=True,null=True)
name=models.CharField(最大长度=100)
amount=models.IntegerField(默认值=1)
定义(自我):
返回self.name
views.py

def附加项(请求,段塞):
sheet=sheet.objects.get(slug=slug)
form=forms.AddItem()
如果request.user==sheet.author:
如果request.method==“POST”:
form=forms.AddItem(request.POST)
如果form.is_有效():
保存(commit=False)
form.sht=Sheet.objects.get(slug=slug)#这是它应该更改的地方
form.save()
返回重定向('sheets:detail',slug=slug)
其他:
form=forms.AddItem()
form.sht=Sheet.objects.get(slug=slug)
返回呈现(请求'sheets/addItem.html',{'form':form,'slug':slug})
其他:
返回重定向('工作表:列表')
保存表单后,在管理控制台中查看后,
sht
永远不会更改,并且仍然等于
blank
。我已经确认,当views.py运行
Sheet.objects.get(slug=slug)
时,存在
Sheet
对象。在模型表单上调用form.save()时,它将始终返回一个模型实例。 这里要做的是在该实例上设置一个关系

您可能认为您正在修改一个相同的东西,但您正在表单上再次调用
.save()
,这将导致创建一个新实例,而不管您以前做了什么

这可能会解决您的问题:

if form.is_valid():
    instance = form.save(commit=False)
    instance.sht = Sheet.objects.get(slug=slug)
    instance.save()
    return redirect('sheets:detail', slug=slug)