Поле Метод Сериализатора Rest Framework - PullRequest
0 голосов
/ 08 мая 2018
class BagSerializer(serializers.ModelSerializer):
    order_date = serializers.SerializerMethodField()

    class Meta:
        model = Bag
        fields = ('order_date')

    def get_order_date(self, obj):
        print('Order date called', obj)

Это вид:

class BagViewSet(viewsets.ModelViewSet):
queryset = Bag.objects.all()
serializer_class = BagSerializer

    def create(self, request):
        try:
            print('Inside create viewset')
            serializer = self.get_serializer(data=request.data)
            if serializer.is_valid():
                print('serializer passed', serializer.validated_data)
            else:
                print('Serializer failed', serializer.errors)
                return Response(serializer.errors)
        except Exception as e:
        print('exception raised--------', e)
    return Response('Boom')

Поле метода сериализатора не вызывается, и его данные тоже не отображаются в validated_data, а метод is_valid () сериализатора возвращает True. Почему бы это не учитывать поля метода сериализатора

1 Ответ

0 голосов
/ 08 мая 2018

SerializerMethodField - это поле только для чтения. Из документов :

Поля только для чтения включены в выходные данные API, но не должны быть включены во входные данные во время операций создания или обновления. любой 'read_only' поля, которые неправильно включены в сериализатор ввод будет игнорироваться.

Если order_date связан с некоторым полем модели, вы можете просто использовать DateField с аргументом source:

order_date = serializers.DateField(source='model_field_name')
...