Как установить поле сериализатора, не показывая его конечному пользователю в DRF?
У меня есть url типа "doc/<int:doc_id>/price/" для get и post и "doc/<int:doc_id>/price/<int:id>" для delete и patch или retrieve.
Моя проблема заключается в том, что при создании новой цены я хочу установить price.doc_id=self.kwargs\['doc_id'\], но в то же время я хочу, чтобы это поле сериализатора было скрыто в документации swagger (я использую drf-spectacular). Конечный пользователь не должен знать об этом поле.
Я знаю, что могу переписать метод create в сериализаторе и явно задать цену или использовать serializers.save(doc=doc), но я задаю этот вопрос, чтобы получить лучшее решение. Я также пробовал hiddenfield, но, по-видимому, он принимает только значение по умолчанию, и я не знаю, как передать ему doc_id.
class DocPriceOutHistorySerializer(ModelSerializerWithValidator):
currency_name = serializers.CharField(read_only=True)
type_price_name = serializers.CharField(read_only=True)
class Meta:
model = models.DictPriceList
fields = (
'id',
'dat',
'price',
'currency',
'currency_name',
'type_price',
'type_price_name',
'obj',
'doc',
)
и в файле views.py
data = request.data
data['doc'] = self.kwargs['doc_id']
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
Это будет работать, но я не хочу вручную писать схему запроса для swagger.