簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM