List index out of range django

Я получаю ошибку list index out of range. Я понимаю, что это происходит из-за того, что я указываю дополнительный индекс элемента в уже сформированном цикле for, так делать нельзя, но, как мне добиться желаемого результата: у меня собирается следующий набор данных:

[
       { "gpu": [
            {"id_group": 44,},
        ]},
       
       { "gpu": [
            {"id_group": 45,},
        ]},
      
       { "gpu": [
            {"id_group": 46,},
        ]},
]

и мне требуется получить значение id_group. Без цикла не обойтись. Ошибка происходит из-за следующей строке: str(device['gpu'][0]['id_group']

models.py

class Filial(models.Model):
    id_filial = models.AutoField(primary_key=True)
    name_filial = models.CharField(max_length=256)

class Station(models.Model):
    id_cs = models.AutoField(primary_key=True)
    name_cs = models.CharField(max_length=256)

    id_filial = models.ForeignKey('Filial', models.DO_NOTHING, blank=True, null=True, related_name='cs_filial')

class Gpu(models.Model):
    id_gpu = models.AutoField(primary_key=True)
    name_gpu = models.CharField(max_length=256)

    id_cs = models.ForeignKey('Station', models.DO_NOTHING, blank=True, null=True, related_name='related_name_cs')

class Group(models.Model):
    id_group = models.AutoField(primary_key=True, verbose_name='id группы работ')

    id_filial = models.ForeignKey('Filial', models.DO_NOTHING, related_name='filial')

    id_cs = GroupedForeignKey(Station, "id_filial", on_delete=models.SET_NULL, null=True, related_name='cs')
    id_gpu = GroupedForeignKey(Gpu, "id_cs", on_delete=models.SET_NULL, blank=True, null=True, related_name='gpu')
    name_group = models.CharField(max_length=256)

serialize.py

class FilialSerializer(ModelSerializer):

    class Meta:
        model = Filial
        fields = ['name_filial']


class StationSerializer(ModelSerializer):
    filial = FilialSerializer(source='id_filial')

    class Meta:
        model = Station
        fields = ['filial', 'name_cs']


class GpuSerializer(ModelSerializer):
    cs = StationSerializer(source='id_cs')

    class Meta:
        model = Gpu
        fields = ['name_gpu', 'cs']


class WorkSerializer(ModelSerializer):

    class Meta:
        model = Works
        fields = ('id_work', 'id_group', 'name_work', 'name_organization', 'quantity_employees',
                  'completion_percentage', 'full_description')


class GroupSerializer(ModelSerializer):
    works = WorkSerializer(many=True, read_only=True)
    cs = StationSerializer(source='id_cs')
    gpu = GpuSerializer(source='id_gpu')
    filial = FilialSerializer(source='id_filial')

    class Meta:
        model = Group
        fields = ['id_group', 'filial', 'cs', 'gpu', 'name_group',  'start_date',
                  'end_date', 'short_description', 'works', ]


class DeviceSerializer(ModelSerializer):
    gpu = GroupSerializer(many=True, read_only=True)
    cs = StationSerializer(source='id_cs')

    class Meta:
        model = Gpu
        fields = ['name_gpu', 'cs', 'gpu']

Блок с ошибкой

def report(equipments=None, date_report=None):
    wb = Workbook()
    ws = wb.active
    ws.title = "Список работ"

    equipments = GasPumpingUnit.objects.all()

    for equipment in equipments:
        serializer = DeviceSerializer(equipment, many=False)
        device = serializer.data

        data = [
            str(device['name_gpu']),
            str(device['cs']['filial']['name_filial']),
            str(device['cs']['name_cs']),
            str(device['gpu'][0]['id_group']),
        ]
        ws.append(data)

попробуйте добавить проверку, если нет gpu. Что-то вроде

my_list = [
       { "gpu": [
            {"id_group": 44,},
        ]},
       
       { "gpu": [
            {"id_group": 45,},
        ]},
      
       { "gpu": []},
]

for el in my_list:
    if el["gpu"]:
        print(el["gpu"][0]["id_group"])
    else:
        print('no gpu')
Вернуться на верх