Возврат полей в пользовательском формате в сериализаторе Django Rest Framework
Я очень новичок в Django rest framework и мне нужно вернуть сериализатор полей модели в пользовательском формате.
Это сериализатор:
class SubjectSkillLevelSerializer(serializers.ModelSerializer):
class Meta:
model = SubjectSkillLevel
fields = ["subject", "level"]
В настоящее время возвращается следующее:
[
{
"subject": 1,
"level": 1
},
{
"subject": 2,
"level": 1
}
]
Как я могу заставить сериализатор возвращать пользовательский формат, подобный этому
{
1 : 1,
2 : 1
}
Что я пробовал:
def to_representation(self, value):
return "%s : %s" % ("subject", "level")
Но это, очевидно, не сработало и просто вернуло строки.
Итак, у меня была похожая проблема, и я хотел изменить возвращаемое значение для одного из полей. Вот что я сделал.
во-первых, поле является EmailField, поэтому я создал пользовательский класс EmailField и добавил несколько кодов в метод to_representation, например, так
class CustomEmailField(serializers.EmailField):
def to_representation(self, value: str) -> str:
import re
value = super().to_representation(value)
regex = "^(\w|\.|\_|\-)+[@](\w|\_|\-|\.)+[.]\w{2,5}$" # noqa: W605
if re.search(regex, value):
return value
return ''
а затем в классе сериализатора вместо стандартного поля EmailField для электронной почты я заменил его созданным мной классом CustomEmailField, и все заработало отлично.
class FormSerilizer(serializer.Serilizer[Dict[str, object]]):
email = CustomEmailField(allow_blank=True, source='user.email', max_length=200)
Надеюсь, это поможет.