Как получить параметр url с помощью django-rest-framework

Я строю карту с различным расположением станций. Станции принадлежат разным полям. Мне нужно показать все станции, и у меня есть все станции одного месторождения.

В какой-то момент вызывается мой api

"""Markers API URL Configuration."""
# Maps with Django (2)
# https://www.paulox.net/2021/07/19/maps-with-django-part-2-geodjango-postgis-and-leaflet/
from rest_framework import routers
from map.viewsets import MarkerViewSet

router = routers.DefaultRouter()
router.register(r"map", MarkerViewSet)
urlpatterns = router.urls

тогда вызывается MarkerViewSet (viewsets.py)

class MarkerViewSet(viewsets.ReadOnlyModelViewSet):
    """Marker view set."""
    #print(self.kwargs.get('idfield'))
    bbox_filter_field = "location"
    filter_backends = (filters.InBBoxFilter,)
    queryset = Stations.objects.filter(station_active=1, map=1)
    serializer_class = StationsSerializer

    def get_queryset(self, **kwargs):
        #field_id = self.kwargs['idfield']
        #print("pp:", self.kwargs)
        return Stations.objects.filter(fields_id_field=1)

Код выше работает, но он показывает только маркеры поля 1

Если я изменю это на 2

return Stations.objects.filter(fields_id_field=2)

Показать все станции поля с id 2

Мой url имеет следующий вид http://127.0.0.1:8080/map/ для печати всех станций всех полей. Если я хочу иметь станции поля 1, мой url будет

http://127.0.0.1:8080/map/1/field

и для поля 2 и 4

http://127.0.0.1:8080/map/2/field
http://127.0.0.1:8080/map/4/field

Моя проблема, я не могу и не знаю как получить id 1,2,4 или другую форму моего url

это не работает

#field_id = self.kwargs['idfield']
#print("pp:", self.kwargs)

Вот мой map/urls.py мой проект urls.py

Нужно ли мне попытаться получить id поля из viewsets.py или как бы вы предложили мне архивировать мою цель?

РЕДАКТИРОВАТЬ: Вот мой views.py. Здесь я могу получить idfield. Есть ли способ передать его my viewsets.py?

kwargs из GET-запроса можно получить следующим образом

request.GET.get("idfield")

Я полагаю, что ваше предложение работает только в файле views.py, поскольку он начинается с

def field(request, idfield):
    request.GET.get("idfield")

не так ли?

Я работаю с файлом viewsets.py, начинающимся с

class MarkerViewSet(viewsets.ReadOnlyModelViewSet):
    """Marker view set."""
    bbox_filter_field = "location"
    filter_backends = (filters.InBBoxFilter,)
    queryset = Stations.objects.filter(station_active=1, map=1)
    serializer_class = StationsSerializer
    """
    def get_tags(self):
        return Stations.objects.filter(fields_id_field=1)
    """
    def get_queryset(self):
        #field_id = self.kwargs['idfield']
        #print("ppp:", self.kwargs['idfield'])
        return Stations.objects.filter(fields_id_field=1)

Я знаю, куда можно добавить ваше предложение.

Однако я думаю, что приблизился к решению, но я все еще получаю ошибку.

Надеюсь, вы сможете мне помочь

Во-первых, в моем файле map.js. я добавил

async function load_markers() {
    const markers_url = `/api/map/1/`; // LOOK AT THIS LINE
    console.log("markers_url: ",markers_url);
    const response = await fetch(markers_url);
    //console.log("response: ",response);
    const geojson = await response.json();
    console.log("geojson: ",geojson);
    return geojson;
}

В моем файле urls.py я изменил на

path("api/<int:idf>/", include("map.api")),

, который перенаправит на файл api.py. Я думаю, что до этого момента все правильно, не так ли?

В моем api.py файле я пробовал разные вещи, вдохновляясь django-rest-framework - router page

router = routers.DefaultRouter()
#router.register(r"map", MarkerViewSet) #INITIAL
#router.register(r"^map/{idf}/$", MarkerViewSet) #I tried this
#router.register(r"^map/(?P<idf>[0-9]+)/$", MarkerViewSet) #this generate an error because of idf 
router.register(r"^map/(?P<id_f>[0-9]+)/$", MarkerViewSet)
urlpatterns = router.urls

Еще одно сообщение об ошибке в Firefox: введите описание изображения здесь

Я считаю, что должен найти правильный формат, но что-то еще должно быть неправильно

Большое спасибо за помощь

Вернуться на верх