Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

262
Views
Vista detallada del producto en Django Rest Framework

Necesito obtener solo un objeto de producto en mi VeiwSet basado en un slug dado, busqué en los documentos, pero no puedo encontrar ninguna solución a este problema. También necesito obtener el slug de la ruta de la URL, pero tampoco sé cómo hacerlo. Obviamente, el siguiente código no funciona.

producto/serializadores.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")

producto/vistas.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

producto/urls.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)) ]
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

ViewSets le permite combinar ListView y DetailView en una sola vista. Por lo tanto, no necesita dos vistas diferentes para manejar ambas acciones.

Ahora, si desea usar slug en la URL en lugar de la id de forma predeterminada, solo tiene que especificar lookup_field en el serializador y la vista de esta manera:

serializadores.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'} }

vistas.py

 class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all().order_by('name') serializer_class = ProductSerializer lookup_field = 'slug'

urls.py

 router = routers.DefaultRouter() router.register(r'', ProductViewSet) urlpatterns = [ url(r'', include(router.urls)), ]

Ahora puede consultar http://localhost:8000/ para la lista de productos y http://localhost:8000/product_slug para obtener detalles del producto con product_slug como slug. Más sobre Django ViewSets y enrutadores

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!