Может ли сериализатор 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']
}
вы можете использовать это пользовательское поле в сериализаторе модели или обычном сериализаторе.