Идентификатор созданного ресурса не в заголовке ответа

Когда я размещаю новую запись в моей конечной точке, где работает Django REST Framework, ответ 201 не содержит вновь созданный идентификатор /pk записи. Я читал, что служба REST должна содержать ссылку на новый ресурс в Location заголовок?

Как мне этого добиться?

Я делаю некоторые интеграции и хотел бы иметь возможность запросить вновь созданный ресурс сразу, без лишних слов.

1 ответ

Решение

В зависимости от типа используемого вами представления вы можете:

  • вручную построить Response так что он включает в себя недавно созданный ресурс.
  • полагаться на create(request, *args, **kwargs) предоставлено CreateModelMixin

Я думаю, что самый простой способ достичь того, что вы ищете, это использовать CreateAPIView, Согласно документации,

Если объект создан, он возвращает ответ 201 Created с сериализованным представлением объекта в качестве тела ответа. Если представление содержит ключ с именем url, то заголовок Location ответа будет заполнен этим значением.

Так что это универсальное представление наверняка возвращает данные в теле каждого ответа, но если вы заинтересованы в получении URL-адреса для каждого из ваших ресурсов, вам, вероятно, стоит взглянуть на HyperlinkedModelSerializer. Эти сериализаторы работают в основном как ModelSerializer за исключением того, что они включают в себя url поле в представлении каждого объекта, позволяющее просматривать ресурсы.

Также, если вы заинтересованы только в получении id/pk я думаю, что каждый созданный объект ModelSerializer устанавливает id поле по умолчанию для каждого представления, которое соответствует фактическому pk в базе данных. Не уверен в этом, но если это не так, вы можете явно запросить его, указав поля для сериализации, а именно

class MySerializer(ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('id', 'name', 'color',)
Другие вопросы по тегам