我只需要根據給定的 slug 在我的 VeiwSet 中獲取一個產品物件,我查看了檔案,但找不到任何解決此問題的方法。我還需要從 url 路徑中獲取 slug,但我也不知道該怎么做。顯然下面的代碼不起作用。
產品/序列化器.py
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
image = serializers.ImageField(required=True)
class Meta:
model = Product
fields = ("name", "description", "slug", "id", "price", "stock", "image", "category")
產品/視圖.py
from django.http.response import JsonResponse
from rest_framework import serializers, viewsets
from rest_framework.response import Response
from django.http import JsonResponse
from .serializers import ProductSerializer
from .models import Product
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all().order_by('name')
serializer_class = ProductSerializer
class ProductDetailViewSet(viewsets.ViewSet, slug):
queryset = Product.objects.filter(slug=slug)
serializer_class = ProductSerializer
產品/網址.py
from rest_framework import routers, urlpatterns
from django.urls import path, include
from .views import ProductViewSet, ProductDetailiewSet
router = routers.DefaultRouter()
router.register(r'', ProductViewSet)
urlpatterns = [
path('<str:slug>/',),
path('', include(router.urls))
]
uj5u.com熱心網友回復:
ViewSets允許您將ListView和DetailView合并為一個視圖。所以你不需要兩個不同的視圖來處理這兩個動作。
現在,如果您想在 url 中使用 slug 而不是id默認情況下,您只需lookup_field在序列化程式和視圖中指定如下:
序列化程式.py
class ProductSerializer(serializers.ModelSerializer):
image = serializers.ImageField(required=True)
class Meta:
model = Product
fields = ("name", "description", "slug", "id", "price", "stock", "image", "category")
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field': 'slug'}
}
視圖.py
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all().order_by('name')
serializer_class = ProductSerializer
lookup_field = 'slug'
網址.py
router = routers.DefaultRouter()
router.register(r'', ProductViewSet)
urlpatterns = [
url(r'', include(router.urls)),
]
現在,您可以查詢http://localhost:8000/的產品清單,并http://localhost:8000/product_slug為產品的細節與product_slug為塞。更多關于Django 視圖集和路由器
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367925.html
標籤:Python 姜戈 Django 休息框架 django-rest-viewsets
上一篇:在Django中過濾隨機物件
