Django REST Framework - Ссылка на пользователя, который добавил заказ - PullRequest
1 голос
/ 08 марта 2020

Я создаю приложение в Django REST Fremework, в котором пользователь может добавить заказ. Я хотел бы, чтобы сериализатор установил ссылку на пользователя на основе токена и заполнил поле модели " Client ".

Это на самом деле работает с HiddenField, как показано в документации. (Ссылка: https://www.django-rest-framework.org/api-guide/fields/#hiddenfield)

class OrderSerializer(serializers.ModelSerializer):
    client = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
    model = Order
    fields = '__all__'

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

curl -X GET http://127.0.0.1:8000/api/orders/12 
{
"id":12,
"name":"sprzatanie ogrodka",
"description":"dupa",
"price":"12.20",
"work_time_hours":2,
"work_time_minutes":50,
"workers_needed_num":3,
"coords_latitude":"-1.300000",
"coords_longitude":"1.100000",
"created_at":"2020-03-08T13:20:16.455289Z",
"finished_at":null,
"category":1,
"workers":[]
}

Я бы хотел, чтобы поле все еще сохраняло ссылку на зарегистрированного пользователя, но в то же время было видно при возврате данных из API.

Какой тип поля сериализатора мне нужно использовать?

Спасибо!

1 Ответ

0 голосов
/ 08 марта 2020

Просматривая найденную документацию: https://www.django-rest-framework.org/api-guide/validators/


Using a standard field with read_only=True, but that also includes a default=… argument. This field will be used in the serializer output representation, but cannot be set directly by the user.

это то, что вам нужно, я думаю. Поэтому любой тип поля, который вы задали в модели, может использоваться с read_only=True Например:

client = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())

Надеюсь, это поможет

...