Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda