在使用update_or_create()时,我无法更新django模型中的行。它将创建一个新行,但不会更新它。在命令行中运行此代码后,我没有得到任何错误。我确信我做错了什么,但我不知道是什么。
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
发布于 2020-07-24 22:09:36
它不应该更新,因为update_or_create首先尝试用提供的参数获取和更新一个对象,如果找不到什么,它会创建一个新对象。它正在创建一个新对象,因为它在您的数据库中找不到带有参数imgs=938的对象。
您可以省略imgs
参数,以允许函数查找具有所提供的date
和bites
参数的对象:
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 })
https://stackoverflow.com/questions/63075051
复制相似问题