Я получаю позиционный аргумент в Django остальные рамки APIView класс пустой.Зачем?И как передать значение в это? - PullRequest
0 голосов
/ 11 декабря 2018

Я играю с DRF просто для удовольствия и пытаюсь получить отдельную запись по ее ID.

Вот мои настройки:

Django версия 2.1.4

DjangoRestFramework 3.9.0

models.py

class BoardModel(models.Model):
    board_title = models.CharField(
        ...
    )
    board_c_time = models.DateTimeField(
        ...
    )

urls.py

urlpatterns = [
    re_path(r'^get_board(?P<pk>\d*)$', views.GetBoard.as_view(), name="get-board"),
]

serializers.py

class GetBoardSerializer(serializers.ModelSerializer):
"""Board serializer."""

class Meta:
    model = BoardModel
    fields = ("id", "board_title", "board_c_time")

views.py

class GetBoard(APIView):
"""Get single board."""

def get_object(self, pk):
    """Search for the object."""
    try:
        return models.BoardModel.objects.get(pk=pk)
    except models.BoardModel.DoesNotExist:
        raise Http404

def get(self, request, pk, format=None):
    """GET method."""
    pk = int(request.query_params.get('pk'))
    obj = self.get_object(pk)
    serializer = GetBoardSerializer(obj)
    return Response(serializer.data)

Отправка GET-запроса на my_url.com/api/get_board?pk=123.

ПозиционныйАргумент 'pk' в методе get класса GetBoard должен принимать значение из параметра pk в URL (например, pk='123'), однако он возвращает пустую строку.

Из-за этого яЯ должен был получить к нему доступ через request.query_params.get('pk'), но мне это кажется странным.

Я что-то пропустил?

Как получить значение из параметра URL в позиционный аргумент в методе get, упомянутом выше?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 11 декабря 2018

Если вы собираетесь отправить параметр в качестве параметра запроса, который является параметрами, указанными в URL после символа ?, то вам необходимо получить к ним доступ через request.query_params.Если вы хотите передать его через URL-адрес, вам следует настроить свой urls.py на:

urlpatterns = [
    re_path(r'^get_board/(?P<pk>\d*)$', views.GetBoard.as_view(), name="get-board"),
]

Тогда ваш URL-адрес должен быть: my_url.com/api/get_board/123

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...