django更新视图添加了一条记录,而不是替换更新后的记录



这是我的Django更新表单视图views.py

def updatebc(request, pk):
instance = get_object_or_404(BaseCase, pk=pk)
instance.base_case_name
bcform = BaseCaseForm(request.POST or None,instance=instance)
if bcform.is_valid():
instance = bcform.save(commit=False)
instance.save()
context = {
'bcform':bcform,
}
return render(request, 'update.html', context)

这是我的型号.py

class BaseCase(models.Model):
base_case_name = models.CharField(primary_key=True, max_length=255)
version = models.TextField(blank=True, null=True)
default = models.TextField(blank=True, null=True)  # This field type is a guess.
class Meta:
managed = False
db_table = 'base_case'

当我尝试更新记录时,我实际上添加了一个,而不是替换它!

如django文档中所述:

主键字段是只读的。如果更改现有对象上主键的值,然后保存它,则会在旧对象旁边创建一个新对象。

您正在更改主键字段base_case_name,因此django将创建一个新实例,而不是更新实例。

def updatebc(request, pk):
instance = get_object_or_404(BaseCase, pk=pk)
instance.base_case_name
bcform = BaseCaseForm(request.POST or None,instance=instance)
if bcform.is_valid():
instance = bcform.save(commit=False)
instance.save()
context = {
'bcform':bcform,
'instance': instance,
}
return render(request, 'update.html', context)

将实例也传递到您的模板并查看

最新更新