[英]How to update an existing record instead of creating a new one in django?
[英]django update view adds a record instead of replacing the updated one
這是我的 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)
這是我的models.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 文檔中所述:
主鍵字段是只讀的。 如果您更改現有 object 上的主鍵值,然后保存它,則將在舊的 object 旁邊創建一個新的 object。
您正在更改主鍵字段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)
將實例也傳遞給您的模板並查看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.