我想为我的模型批量创建对象。 我的模特是
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
那么如何批量创建对象呢? 任何帮助将不胜感激。
答案 0 :(得分:4)
您可以尝试以下几行,只创建2 db命中:
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