Как перебрать элементы кортежа и добавить их в модель (таблицу базы данных)

Рейтинг: 0Ответов: 1Опубликовано: 06.06.2023

У меня есть список с вложенными словарями и кортежами, мне необходимо добавить элементы в базу данных, я это делаю так (элемент кортежа добавляется с использованием индекса):

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'],
        )

Ответы

▲ 0Принят

В целом, довольно стандартный проход по словарю:

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