gpt4 book ai didi

python - 如何在 Django 中为字典批量创建和保存对象

转载 作者:行者123 更新时间:2023-11-28 22:21:15 28 4
gpt4 key购买 nike

我想为我的模型批量创建对象。我的模型是

class Fees(models.Model):
city = models.CharField(max_length=200, blank=True)
contact = models.CharField(max_length=200, blank=True)
class = models.CharField(max_length=200, blank=True)
veg = models.BooleanField(default=False)
rollno = models.CharField(max_length=200, blank=True)

我的字典值是 -

response = {
'A101': {
'VEG': True,
'CONTACT': '12345',
'CLASS': 'SIX',
'ROLLNO': 'A101',
'CITY': 'CHANDI',
},
'A102': {
'VEG': True,
'CONTACT': '54321',
'CLASS': 'SEVEN',
'ROLLNO': 'A102',
'CITY': 'GANGTOK',
},
}

目前我正在做如下 -

def create_obj(response):
for key, value in response.items():
fee_obj, _ = Fees.objects.get_or_create(
rollno=key, defaults={
**change_value
})
yield fee_obj

那么我怎样才能批量创建对象。任何帮助将不胜感激。

最佳答案

您可以按照以下几行进行尝试,这只会产生 2 次数据库命中:

def create_obj(response):
# 1st db query: existing fees instances form response
existing = Fees.objects.filter(rollno__in=response.keys())

keys = set(f.rollno for f in existing)

# 2nd db query: bulk create non-existing
new = Fees.objects.bulk_create([
Fees(**{ke.lower(): va for ke, va in value.items()})
for key, value in response.items() if key not in keys
])

yield from existing
yield from new

关于python - 如何在 Django 中为字典批量创建和保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48468309/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com