Django get() получил неожиданный аргумент ключевого слова 'slug'

Мне нужно использовать корейский язык в url, но он не работает.

enter image description here

views.py

class BuildingInfoAPI(APIView):
    def get(self, request):
        queryset = BuildingData.objects.all()
        serializer = BuildingSerializer(queryset, many=True)
        return Response(serializer.data)
class ReviewListAPI(APIView):
    def get(self, request):
        queryset = ReviewData.objects.all()
        serializer = ReviewSerializer(queryset, many=True)
        return Response(serializer.data)

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/buildingdata/', BuildingInfoAPI.as_view()),
    path('api/buildingdata/<str:slug>/', ReviewListAPI.as_view())
]

Я пробовал slug:slug и url с re_path, но эти методы говорят "страница не найдена"

поэтому я попробовал str:slug, но он говорит

get() got an unexpected keyword argument 'slug'

Это данные slug в моей модели.

slug = models.SlugField(max_length=50, unique=True, allow_unicode=True, default=uuid.uuid1)

'allow_unicode' позволяет использовать корейский язык в url.

Я не могу найти, какой код является неправильным.

Есть ли проблемы с views.py или urls.py?

Для ReviewListAPI метод .get(…) должен принимать self, request и slug в качестве параметров:

class ReviewListAPI(APIView):
    def get(self, request, slug):
        queryset = ReviewData.objects.all()
        serializer = ReviewSerializer(queryset, many=True)
        return Response(serializer.data)

Поскольку ваш метод .get(…) принимает slug, вам, вероятно, следует переписать логику и учесть slug.

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