Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

263
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda