Django Rest Framework过滤器不起作用,可浏览的API上未显示“过滤器”按钮

问题描述

早上好,我是django和django rest框架的新手。我正在尝试进行一些过滤。我按照文档https://www.django-rest-framework.org/api-guide/filtering/上的步骤进行操作,但是没有任何效果,它甚至没有显示可浏览api上的过滤器按钮。希望有人可以帮忙。谢谢

settings.py

INSTALLED_APPS = [
    'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','rest_framework','django_filters','rfproducts','frontend'
]

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 15,}

views.py

class ProductsView(generics.ListAPIView):
    queryset = Products.objects.all()
    serializer_class = ProductsSerializers
    filterset_fields = ['category']

models.py

class Products(models.Model):
    product_partnumber = models.CharField(max_length=255)
    image_link = models.URLField()
    pdf_link = models.URLField()
    manufacturer = models.ForeignKey(Manufacturer,on_delete=models.CASCADE)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)
    subcategory = models.ForeignKey(Subcategory,on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_Now_add=True)

serializers.py

class ProductsSerializers(serializers.ModelSerializer):

    specifications = ProductSpecificationSerializers(many=True)
    manufacturer_details = ManufacturerSerializers(source='manufacturer',read_only=True)
    category_details = CategorySerializers(source='category',read_only=True)
    
    class Meta:
        model = Products
        fields = ['id','product_partnumber','image_link','pdf_link','manufacturer','manufacturer_details','category','category_details','subcategory','specifications']

    def create(self,request):
        specs_data = request.pop('specifications')
        product = Products.objects.create(**request)
        
        for spec_data in specs_data:
            ProductSpecification.objects.create(product=product,**spec_data)

        return product

当我尝试访问url中的某些参数时,例如

api/products?category=2

url.py

from django.urls import path,include
from .api import ProductsView,ManufacturerView,SpecificationView,CategoryView,SubcategoryView
from rest_framework import routers

router = routers.DefaultRouter()
router.register('api/products',ProductsView,'products' )
router.register('api/manufacturers','manufacturers')
router.register('api/specifications','specification')
router.register('api/category','category')
router.register('api/subcategory',SubcategoryView,'subcategory')

urlpatterns = [
    path('',include(router.urls))
] 

它重新运行状态为200的空白页面。类别字段包含一个外键。

我在前端使用React,这会影响问题吗?

在图像中,可浏览的API上未显示过滤器按钮,并且url参数中的类别值也存在

sample broswsable api

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)