2017-02-08 3 views
5

Я хочу сериализовать модель и включить дополнительное поле. Я хочу использовать этот сериализатор для списка, подробностей и создания представлений. В serialializer я использую методы create, update и get_field для настройки логики.Django rest framework extra serializer field with get and post

class ExampleSerializer(serializers.ModelSerializer): 
    field = serializers.CharField() 

    class Meta: 
     model = Example 
     fields = ("field", ...) 

При добавлении нового объекта все правильно (я могу Валидация пользовательских данных на местах), но когда я получаю объект, «поле» не существует в ответ.

EDIT: Я хочу установить собственный метод для класса serializer для получения поля. Это лучшее логическое решение для меня, а затем установить пользовательский метод для модели.

Почему это так? Существует ли лучшее решение для этого (я не хочу использовать SerializerMethodField)?

ответ

1

Это поле не является частью модели, из-за которой наступает ошибка. Вы можете создать это поле write_only = True.Показать поле - дополнительное поле.

class ExampleSerializer(serializers.ModelSerializer): 
    field = serializers.CharField(write_only=true) 

    class Meta: 
     model = Example 
     fields = ("field", ...) 

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

  1. Мы можем определить метод свойства с этим именем поля. Вы можете включить это поле в сериализаторе, как только для чтения каких-либо данных, вы можете вернуться к этому

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. вы можете использовать serilizermethod поля.

    class ExampleSerializer(serializers.ModelSerializer): 
        field = serializers.serializerMethod() 
    
        class Meta: 
         model = Example 
         fields = ("field", ...) 
         def get_field(self, obj): 
          return obj.data 
    
+0

Когда я добавить атрибут источника на поле я должен иметь собственный метод на модели. Я хочу использовать метод класса serializer. Это лучше для меня логика. Это возможно? – SmoQ

+0

вы должны дать только аргумент источника в этом поле в строковом формате. –

Смежные вопросы