ModelViewset en django

0

Pregunta

Soy novato de Django Rest framework. Yo uso Modelviewset para crear API para el proyecto. Quiero obtener la lista de cosas no por id y yo uso lookup_field a hacer eso. Pero es sólo return 1 objeto. ¿Cómo puedo personalizado para volver multible objeto?

este es mi modelo

class Rating(models.Model):
    dayandtime = models.DateTimeField(auto_now_add=True)
    ratingpoint = models.IntegerField(null=True,blank=True)
    ratingcomment = models.TextField(null=True, blank=True)
    img = models.ImageField(upload_to='static',default=None)
    product = models.ForeignKey(Product,on_delete=models.CASCADE)
    user = models.ForeignKey(User,on_delete=models.CASCADE)

Este es mi punto de vista

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer
    lookup_field = "product"

Este es mi Serializador

class RatingSerializer(ModelSerializer):
    class Meta:
        model=Rating
        fields=["id","dayandtime","ratingpoint", "ratingcomment","img","product","user"]
        lookup_field = "product" 

Por favor me ayudan a sovle este problema. Muchas gracias

1

Mejor respuesta

1

Desea utilizar el filtro en el api y la devolución de varios objetos. Pero lookup_field es utilizada para la realización del objeto de la búsqueda de uno de los modelos de instancias. Hay muchas manera de lograr su objetivo, pero les voy a mostrar filtro de consulta de parámetros.

Puede reemplazar get_queryset() para lidiar con las direcciones Url como http://yourdoamin.com/api/ratings?product=1 ( aquí se supone que desea filtrar por id de producto ).

class RatingViewSet(viewsets.ModelViewSet):
    serializer_class = RatingSerializer

    def get_queryset(self):
        queryset = Rating.objects.all()
        product= self.request.query_params.get('product')
        if product not None:
            queryset = queryset.filter(product_id=product)
        return queryset

Por supuesto, usted puede agregar muchos if/elif/else bloque para controlar muchos parámetros de la consulta.

También puede utilizar un método similar : El SearchFilter de la clase para lograr el mismo objetivo.

Más info en la DRF filtrado de documentación

2021-11-24 10:00:31

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................