ModelViewset in django

0

Domanda

Io sono newbie di Django Resto-quadro. Io uso Modelviewset per creare API per il progetto. Voglio ottenere l'elenco di cosa non da id e io uso lookup_field per farlo. Ma è solo return 1 oggetto. Come posso personalizzato per la restituzione di presentazione di copertine, molteplice oggetto?

questo è il mio modello

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)

Questo è il mio punto di vista

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

Questo è il mio Serializzatore

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

Si prega di aiutare me sovle questo problema. Vi ringrazio molto

1

Migliore risposta

1

Si desidera utilizzare un filtro sulla api e tornare più oggetti. Ma lookup_field è utilizzato per l'esecuzione di oggetto di ricerca delle singole istanze di modelli. Ci sono molti modi per raggiungere il tuo obiettivo, ma vi mostrerò filtro per i parametri di query.

È possibile eseguire l'override get_queryset() per affrontare con Url come http://yourdoamin.com/api/ratings?product=1 ( qui diamo per scontato che si desidera filtrare id del prodotto ).

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

Naturalmente, è possibile aggiungere molti if/elif/else blocco per gestire molti parametri di query.

È inoltre possibile utilizzare un metodo simile : Il SearchFilter classe per raggiungere lo stesso obiettivo.

Più informazioni su il DRF filtro documentazione

2021-11-24 10:00:31

In altre lingue

Questa pagina è in altre lingue

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