Добавить немодельное поле только для метода post в ModelSerializer DRF3

Я хочу добавить пользовательское поле, которое будет использоваться только при создании объекта. Например, у меня есть сериализатор модели, и я хочу добавить поле, которого нет в моей модели, и я хочу использовать его только при post request.

Есть несколько способов достичь этого, что-то простое - создать два сериализатора и в APIView реализовать метод get_serializer(), поделитесь следующим примером:

def get_serializer_class(self):
    if not self.request.POST:
        return ShipSerializerPOST
    return ShipSerializer

Первое решение может быть применено, когда сериализаторы имеют большие различия.

В вашем случае разница настолько мала, что вы можете использовать второй вариант, которым я делюсь в следующем примере:

class ShipSerializer():
    count = serializers.SomeMagicalField() # only for post methods
    class Meta:
        model = models.Ship
        fields = ('id', 'mother_ship')

    def __init__(self, *args, **kwargs):

        # Don't return count if POST
        if not self.request.POST:
            del self.fields['count']

        super().__init__(*args, **kwargs)

Надеюсь, один из вариантов поможет.

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