Возврат полей в пользовательском формате в сериализаторе 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)

Надеюсь, это поможет.

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