我有一个 DRF 项目,其中有一个名为“类别”的模型的
ListAPIView
。该模型有一个名为parent_category 的ForeginKey
以及子类别的相关名称。我希望我的 URL 表现如下:
example.com/api/categories
example.com/api/categories/{id_here}
models.py:
class Category(models.Model):
name = models.CharField(max_length=100)
parent_category = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE,
related_name='subcategories')
views.py:
class CategoryList(generics.ListAPIView):
queryset = Category.objects.all()
serializer_class = CategorySerializer
我不知道如何编写我的 urls.py。我需要 DRF 路由器吗?或者 Django 路径工作正常吗?我不知道该选择哪个或如何在这个项目中使用它们。我想如果我重写 ListAPIMixin 的
list()
方法,它会起作用,但我什至不知道在其中写什么。
我为自己做了一个虚拟项目并像这样实现了
您可以通过重写来做到这一点
get_queryset
from .models import Category
from rest_framework.generics import ListAPIView
from .serializers import CategorySerializer
class CategoryViewSet(ListAPIView):
serializer_class = CategorySerializer
def get_queryset(self):
parent_category = self.kwargs.get("parent_category") or None
return Category.objects.filter(parent_category=parent_category)
您可以设置多条路线选项
from django.contrib import admin
from django.urls import path
from cate.views import CategoryViewSet
urlpatterns = [
path('admin/', admin.site.urls),
path('', CategoryViewSet.as_view() ,name="category"),
path('<int:parent_category>/', CategoryViewSet.as_view() ,name="category"),
]
from .models import Category
from rest_framework import serializers
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = "__all__"