Как добавить вложенное поле после создания ModelSerializer? Не в классе

В основном я хочу иметь fk_inventory как вложенное поле в StorageRackSerializer, но, как вы видите, мне также нужно использовать StorageRackSerializer в InventorySerializer.

Как я могу установить поле после создания класса сериализатора? Я пробовал создать поле fk_inventory и установить его в None и пытался установить в InventorySerializer после этого, но ничего не получилось.

class Inventory(models.Model):
    inventory_id    = models.AutoField(primary_key=True)
    fk_building     = models.OneToOneField(Store, on_delete=models.CASCADE, unique=True, related_name='inventory')
    def __str__(self):
        return f"{self.inventory_id}"

class StorageRack(models.Model):
    storage_rack_id = models.AutoField(primary_key=True)
    quantity        = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(50)])
    fk_inventory    = models.ForeignKey(Inventory, on_delete=models.CASCADE, related_name="storage_racks")
    fk_product_id   = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True, related_name="storage_racks")
    def __str__(self):
        return f"{self.storage_rack_id}"

class StorageRackSerializer(serializers.ModelSerializer):
    fk_product_id = ProductSerializer(read_only=True)    
    fk_inventory = None    

    class Meta:
        model = StorageRack
        fields = ('storage_rack_id', 'quantity', 'fk_inventory', 'fk_product_id')
        

class InventorySerializer(serializers.ModelSerializer):
    fk_building = StoreSerializer()
    storage_racks = StorageRackSerializer(many=True)

    class Meta:
        model = Inventory
        fields = ('inventory_id', 'fk_building', 'storage_racks')
StorageRackSerializer.fk_inventory = InventorySerializer()

Вы можете добавить поле 'fk_inventory' в подтвержденные данные из SorageRackSerializer

validated_data = StorageRackSerializer(data=data)
validated_data['fk_inventory'] = InventorySerializer().data 
Вернуться на верх