Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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_Django Forms_Django Views - Fatal编程技术网

Python django更新视图添加记录,而不是替换更新的记录

Python django更新视图添加记录,而不是替换更新的记录,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,这是更新表单的Django视图 views.py def updatebc(请求,主键): 实例=获取对象或404(基本情况,pk=pk) instance.base\u case\u名称 bcform=BaseCaseForm(request.POST或None,instance=instance) 如果bcform.is_有效(): instance=bcform.save(commit=False) save()实例 上下文={ “bcform”:bcform, } 返回呈现(请求'upd

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

def updatebc(请求,主键):
实例=获取对象或404(基本情况,pk=pk)
instance.base\u case\u名称
bcform=BaseCaseForm(request.POST或None,instance=instance)
如果bcform.is_有效():
instance=bcform.save(commit=False)
save()实例
上下文={
“bcform”:bcform,
}
返回呈现(请求'update.html',上下文)
这是我的模特

类基本情况(models.Model):
基本大小写名称=models.CharField(主键=True,最大长度=255)
version=models.TextField(blank=True,null=True)
default=models.TextField(blank=True,null=True)#此字段类型是猜测。
类元:
托管=错误
db_表='base_case'
当我试图更新一条记录时,我实际上是添加了一条而不是替换它

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)
将实例也传递给模板,请参见

还将实例传递给模板,请参见中提到的

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

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

如中所述:

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


您正在更改主键字段
base\u case\u name
,因此django不会更新实例,而是会创建一个新的实例。

为什么要将CharField设置为主键?我不允许更改数据库架构:/where is models.py?我没有收到您的问题?我在上面的问题中提到了models.py,为什么要将CharField设置为主键?我不允许对数据库架构进行更改:/models.py在哪里?我没有听到你的问题?我在上面的问题中提到models.py是完全正确的,因为当我更改其他内容而不是base_case_名称时,它工作正常,是否有其他方法可以强制执行?@MehdiSelbi如果要防止用户更改主键字段,您可以在表单中简单地
排除它。完全正确,因为当我更改其他内容而不是基本的\u case\u名称时,它可以正常工作,是否有其他方法可以强制它?@MehdiSelbi如果您想阻止用户更改主键字段,您可以在表单中简单地
排除
它。实例作为上下文在我的情况下不会改变任何东西问题在上面提到的主键中实例作为上下文在我的情况下不会改变任何东西问题在上面提到的主键中