Множественные try except в сериализаторе Django

У меня есть модель Хранилища, подобная следующей:

class ShelfBin(models.Model):
    bin_id = models.IntegerField(default=0)
    bin_name = models.CharField(max_length=50, default=0)


class UnitShelf(models.Model):
    shelf_id = models.IntegerField(default=0)
    shelf_name = models.CharField(max_length=50, default=0)
    bin = models.ManyToManyField(ShelfBin, blank=True)


class AisleUnit(models.Model):
    unit_id = models.IntegerField(default=0)
    unit_name = models.CharField(max_length=50, default=0)
    shelf = models.ManyToManyField(UnitShelf, blank=True)


class ZoneAisle(models.Model):
    aisle_id = models.IntegerField(default=0)
    aisle_name = models.CharField(max_length=50, default=0)
    unit = models.ManyToManyField(AisleUnit, blank=True)


class WarehouseZone(models.Model):
    zone_id = models.IntegerField(default=0)
    zone_name = models.CharField(max_length=50, default=0)
    aisle = models.ManyToManyField(ZoneAisle, blank=True)


class Warehouse(models.Model):

    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=250, default=0)
    address = models.CharField(max_length=500, default=0)
    zones = models.ManyToManyField(WarehouseZone, blank=True)

для этого я создал сериализатор, подобный следующему:

class WarehouseSerializer(serializers.ModelSerializer):
    zones = WarehouseZonesSerializer(many=True)

    class Meta:
        model = Warehouse
        fields = "__all__"

    def create(self, validated_data):
        print("validated data warehouse", validated_data)
        zone_objects = validated_data.pop('zones', None)
        instance = Warehouse.objects.create(**validated_data)

        for item in zone_objects:
            aisle_objects = item.pop('aisle')
            wz_obj = WarehouseZone.objects.create(**item)

            for data in aisle_objects:
                unit_objects = data.pop('unit')
                za_obj = ZoneAisle.objects.create(**data)

                for u_data in unit_objects:
                    shelf_objects = u_data.pop('shelf')
                    au_obj = AisleUnit.objects.create(**u_data)

                    for s_data in shelf_objects:
                        bin_objects = s_data.pop('bin')
                        us_obj = UnitShelf.objects.create(**s_data)

                        for b_data in bin_objects:
                            b_obj = ShelfBin.objects.create(**b_data)
                            us_obj.bin.add(b_obj)
                        au_obj.shelf.add(us_obj)
                    za_obj.unit.add(au_obj)
                wz_obj.aisle.add(za_obj)
            instance.zones.add(wz_obj)
        return instance

Теперь проблема в том, что иногда склад может иметь зоны, проходы, единицы и т.д. (все 5 подуровней), но иногда он может быть только 1, 2 или 0 уровней в глубину. и в таких случаях возникает ошибка, подобная этой :

aisle_objects = item.pop('aisle')
KeyError: 'aisle'

Итак, должен ли я использовать try и except на каждом уровне цикла или есть лучший способ обработки этих исключений?

Вернуться на верх