Добавить немодельное поле только для метода 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)
Надеюсь, один из вариантов поможет.