簡體   English   中英

Django update_or_create 不更新而是插入

[英]Django update_or_create not updating but inserting instead

使用 update_or_create() 時,我無法更新 django model 中的行。 它將創建一個新行但不會更新它。 在命令行中運行此代碼后,我沒有收到任何錯誤。 我確定我做錯了什么,但我不知道是什么。

model.py

class Test(models.Model):
    id = models.AutoField(primary_key=True)
    date = models.CharField(blank=True, max_length=100, unique=True)
    bites = models.CharField(blank=True, max_length=100)
    imgs = models.CharField(blank=True, max_length=100)
.\manage.py shell
from status.models import Test
import pandas as pd

d1 = pd.read_csv('data1.csv')
2020-02-10  2355975072768 939

d2 = pd.read_csv('data2.csv')
2020-02-10  2355975072768 938

for model in d1.itertuples():
    model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, imgs=model.total_files, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files })

database_sqlite3 output: 
1|2020-02-10|2355975072768|939

for model in d2.itertuples():
    model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, imgs=model.total_files, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files })

database_sqlite3 output: 
1|2020-02-10|2355975072768|939
2|2020-02-10|2355975072768|938

它不應該更新,因為update_or_create首先嘗試使用提供的 arguments 獲取和更新 object,如果它沒有找到任何東西,它會創建一個新的 object。 它正在創建一個新的 object,因為它在您的數據庫中找不到帶有參數 imgs=938 的 object。

您可以省略imgs參數以允許 function 找到具有提供的date和咬合bites的 object:

model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files }) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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