Как перебрать элементы кортежа и добавить их в модель (таблицу базы данных)
У меня есть список с вложенными словарями и кортежами, мне необходимо добавить элементы в базу данных, я это делаю так (элемент кортежа добавляется с использованием индекса):
class Content(models.Model):
nmId = models.IntegerField(null=True, blank=True)
colors = models.CharField(max_length=150, null=True, blank=True)
data=[{'sizes': [{'chrtID': 68964543, 'techSize': '50', 'skus': ['2003633919020', '2003754125620']}, {'chrtID': 68964544, 'techSize': '52', 'skus': ['2003633919037']}],
'mediaFiles': ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg'],
'colors': ['голубой', 'белый', 'зеленый', 'красный'],
'updateAt': '2023-05-07',
'vendorCode': 'П0015П0015Г',
'nmID': 31907549,
'imtID': 23856780,
'isProhibited': False,
'tags': []}]
for key1 in data:
Content.objects.create(
nmId = key1['nmID'],
colors = key1['colors'][0],
)
и это почти работает, в таблицу добавляется первый элемент кортежа, а если кортеж пуст, то возникает ошибка. Как правильно перебрать элементы кортежа, чтобы добавить их в бд? (что то вроде этого):
for key1 in data:
for key2 in data['colors']:
Content.objects.create(
nmId = key1['nmID'],
colors = key2['colors'],
)
Ответы (1 шт):
Автор решения: Chillie
→ Ссылка
В целом, довольно стандартный проход по словарю:
for item in data:
item_nm_id = item.get('nmID', 0) # 0 - значение по умолчанию, если нет в словаре
for color in item.get('colors', []): # опять же, чтобы не было KeyError
new_content = Content(nmId=item_nm_id, colors=color,)
new_content.save()
Если ожидается очень много объектов, стоит посмотреть на использование bulk_create