2014-09-09 2 views
1

У меня есть модель сериалайзер, которая, как так -сериализатору установить пользовательские значения

class VariableSerializer(serializers.ModelSerializer): 
    owner_name = serializers.Field(source='owner_id.owner_name') 

    class Meta: 
     model = Varmst 
     resource_name = 'varmst' 
     fields = ('varmst_id', 'varmst_type', 'varmst_name', 'varmst_value', 
      'varmst_desc') 

«varmst_value» соответствует целому числу, что, в зависимости от того, что целое может означать разные вещи. Как вернуть нормированное значение OVER целое число?

ie. если «varmst_value» = 2, то я хочу сериалайзер вернуть «varmst_type»: «электронной почты» если «varmst_value» = 3, то я хочу, чтобы сериализатору вернуть «varmst_type»: «сайт»

ответ

1

я думаю следующее решение может помочь вам

class VariableSerializer(serializers.ModelSerializer): 
    owner_name = serializers.Field(source='owner_id.owner_name') 

    class Meta: 
     model = Varmst 
     resource_name = 'varmst' 
     fields = ('varmst_id', 'varmst_type', 'varmst_name', 'varmst_value', 
        'varmst_desc') 

    def transform_varmst_type(self, obj, value): 
     if obj.varmst_value == 2: 
      return "email" 
     if obj.varmst_value == 3: 
      return "Website" 
+0

Теперь оно возвращает нулевое значение вместо числа, так что похоже, что он работает частично. Просто не знаете, почему это не меняет стоимость? – whoisearth

+0

Если я изменю возврат к простому «проходу», он все равно останется как null, поэтому что-то в поиске объекта - это его значение null? – whoisearth

+0

мой плохой. исправлено. Я объяснил, что ваш код работает неправильно. Я должен был, если obj.varmst_type == 2: вернуть «email». – whoisearth