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