Как установить поле сериализатора, не показывая его конечному пользователю в 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.