Получить сериализованные данные в другом формате
Как я могу получить json в новом формате, как просто text/value
как:
[
{
"name": "doc2",
"directions": [
"mar",
"qwe"
]
},
{
"name": "John",
"directions": [
"Surgery",
"qwe"
]
}
]
И не как:
[
{
"name": "doc2",
"directions": [
{
"name": "mar"
},
{
"name": "qwe"
}
]
},
{
"name": "John",
"directions": [
{
"name": "Surgery"
},
{
"name": "qwe"
}
]
}
]
Вот мои models.py
и serializers.py
модули:
models.py
class Directions(models.Model):
name = models.CharField(max_length=355)
def __str__(self):
return self.name
class Doctors(models.Model):
name = models.CharField(max_length=255)
directions = models.ManyToManyField(Directions)
def __str__(self):
return self.name
serializer.py
class DirectionsSerializer(serializers.ModelSerializer):
class Meta:
model = Directions
fields = ('name',)
class DoctorsSerializer(serializers.ModelSerializer):
directions = DirectionsSerializer(many=True)
class Meta:
model = Doctors
fields = ('name', 'directions')
У вас есть два варианта достижения этой цели:
- Использование
Custom relational fields
:
В вашем случае мы можем определить реляционное поле для сериализации трека в пользовательское строковое представление, используя его порядок, название и продолжительность:
class DirectionsSerializer(serializers.RelatedField):
def to_representation(self, value):
return value.name
class DoctorsSerializer(serializers.ModelSerializer):
directions = DirectionsSerializer(many=True)
class Meta:
model = Doctors
fields = ['name', 'directions']
Затем это пользовательское поле будет сериализовано в следующем представлении:
[
{
"name": "doc2",
"directions": [
"mar",
"qwe"
]
},
{
"name": "John",
"directions": [
"Surgery",
"qwe"
]
}
]
- Использование
StringRelatedField()
:
StringRelatedField
может использоваться для представления цели отношения с помощью своего метода __str__
.
Например, следующий сериализатор:
class DoctorsSerializer(serializers.ModelSerializer):
directions = serializers.StringRelatedField(many=True)
class Meta:
model = Doctors
fields = ['name', 'directions']
Сериализуется в следующее представление:
[
{
"name": "doc2",
"directions": [
"mar",
"qwe"
]
},
{
"name": "John",
"directions": [
"Surgery",
"qwe"
]
}
]
Это поле read_only
.
Аргументы:
many
- Если применяется к отношению "ко многим", следует установить этот аргумент вTrue
.