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

#python #django

Вопрос:

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

введите описание изображения здесь

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 = models.SlugField(max_length=50, unique=True, allow_unicode=True, default=uuid.uuid1)
 

«allow_unicode» позволяет использовать корейский язык в URL-адресе.

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

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

Ответ №1:

Для 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(…) метод использует пули, вам, вероятно, следует переписать логику и принять во внимание пули.