2016-05-09 3 views

ответ

1

Вы не делаете.

Если вам нужно передать дополнительные данные в сериализатором создадим/обновления пожалуйста, сделайте это при вызове serializer.save() as explained in the documentation

0

Помимо того, что @Linovia предложил, вы можете сделать что-то вроде этого:

serializer.data['item'] = 'test' 

Удостоверьтесь, что вы вызываете это до того, как вызывается serializer.is_valid.

Если вы хотите добавить данные после serializer проверки, вы должны сделать так:

serializer.validated_data['item'] = 'test' 
+0

serializer.data [ «вещь»] = «тест» не работает –

5

К сожалению, serializer.data является неизменны. Вместо добавления предметов на serializer.data вы можете копия serializer.data другому dict. Вы можете попробовать это:

newdict={'item':"test"} 
newdict.update(serializer.data) 
return Response(newdict, status=status.HTTP_201_CREATED) 
+1

я считаю, что это полезно для передачи дополнительных данных в 'Response', которые не являются частью сериализатора/модели (таким образом, не подтверждено) – minusf

0

Объект serializer.data является экземпляром ReturnList, который неизменен. Что вы можете сделать, чтобы обойти это ограничение преобразования serializer.data объекта в список простого Python(), а затем добавить значение, которое вы хотите, чтобы вы могли использовать преобразованный список в ответе() метод как это:

def get(self, request): 
    serializer = YourAmazingSerializer(many=True) 
    new_serializer_data = list(serializer.data) 
    new_serializer_data.append({'dict_key': 'dict_value'}) 
    return Response(new_serializer_data) 

Тогда , ваш ответ будет ваш новый OBJ

0

Мы можем обновить данные, передаваемые в ответ с serializer._data

образец кода

class SampleAPIView(generics.CreateAPIView) 
    serializer_class = SampleSerializer 

    def perform_update(self, serializer): 
     application = serializer.save(status='pending') 
     my_response_data = {'id': 110, 'name': 'Batta'} 
     serializer._data = out_data 

serializer._data сделает магию. Код: https://github.com/encode/django-rest-framework/blob/master/rest_framework/serializers.py#L260

0

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

http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

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

class UserSerializer(serializers.ModelSerializer): 
    days_since_joined = serializers.SerializerMethodField() 

    class Meta: 
     model = User 

    def get_days_since_joined(self, obj): 
     return (now() - obj.date_joined).days