ModelViewset dans django

0

La question

Je suis newbie de Django Reste-cadre. J'utilise Modelviewset de créer des API pour le projet. Je veux avoir la liste des chose pas par id et je l'utilise lookup_field de le faire. Mais c'est seulement de retour 1 objet. Comment puis-je coutume de retour multible objet?

c'est mon modèle

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)

C'est mon point de vue

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

C'est mon Sérialiseur

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

Merci de m'aider à sovle ce problème. Merci beaucoup

1

La meilleure réponse

1

Vous souhaitez utiliser un filtre sur l'api et le retour de plusieurs objets. Mais lookup_field est utilisé pour l'exécution de l'objet de recherche de personne d'instances de modèle. Il y a beaucoup de chemin pour atteindre votre objectif, mais je vais vous montrer filtre par les paramètres de la requête.

Vous pouvez remplacer get_queryset() de traiter avec des Url de la forme http://yourdoamin.com/api/ratings?product=1 ( ici, nous supposons que vous souhaitez filtrer par id de produit ).

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

Bien sûr, vous pouvez ajouter de nombreux if/elif/else bloc à gérer de nombreux paramètres de la requête.

Vous pouvez également utiliser une méthode similaire : La SearchFilter classe à atteindre le même objectif.

Plus d'infos sur le DRF de filtrage de la documentation

2021-11-24 10:00:31

Dans d'autres langues

Cette page est dans d'autres langues

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