问题描述
早上好,我是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))
]
我在前端使用React,这会影响问题吗?
在图像中,可浏览的API上未显示过滤器按钮,并且url参数中的类别值也存在
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)