Может ли сериализатор DRF объединить несколько полей во вложенный JSON?

У меня есть модель товара для интернет-магазина. Могу ли я написать сериализатор, который будет упаковывать несколько полей во вложенный JSON? Например:

class Product(models.Model):
    product_type = models.CharField(
        choices=ProductType.choices, 
        max_length=20
        )
    vendor_code = models.CharField(max_length=20)
    name = models.CharField(
        max_length=100, 
        default=vendor_code
        )
    material = models.CharField(
        choices=Material.choices,
        max_length=20
    )
    coating = models.CharField(
        choices=Coating.choices,
        default=Coating.NO_COATING,
        max_length=20
    )
    gem_type = models.CharField(
        choices=GemType.choices,
        default=GemType.NO_GEM,
        max_length=20
    )
    gem = models.CharField(
        choices=Gem.choices,
        blank=True,
        null=True,
        max_length=20
    )

Я хочу, чтобы некоторые поля объединялись во вложенный JSON при сериализации:

{
    'product_type': ...,
    'vendor_code': ...,
    'characteristics': {
        'material': ...,
        'coating': ...,
        ...
}

Возможно ли это в DRF?

что вы можете сделать, это написать пользовательское поле, например:

 class MySerializer(serializers.ModelSerializer):
       my_nested_field = serializers.SerializerMethodField()
       class Meta:
             fields = ['field_1', 'field_2', 'my_nested_field']
       
       def get_my_nested_field(self, obj):
           return {
             'field_1':obj['field_1'], 
             'field_2':obj['field_2']  
           }

вы можете использовать это пользовательское поле в сериализаторе модели или обычном сериализаторе.

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