ModelViewset în django

0

Problema

Eu sunt incepator de Django Rest-cadru. Eu folosesc Modelviewset pentru a crea API pentru proiect. Vreau pentru a obține lista de lucru nu de id-ul și am folosi lookup_field să fac asta. Dar este doar 1 obiect. Cum pot personalizate pentru a reveni multible obiect?

asta e modelul meu

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)

Acest lucru este meu de vedere

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

Acest lucru este meu Serializer

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

Te rog ajută-mă să sovle această problemă. Vă mulțumesc foarte mult

1

Cel mai bun răspuns

1

Doriți să utilizați filtrul de la api și de a reveni mai multe obiecte. Dar lookup_field este folosit a pentru realizarea obiectului de căutare de individ model de cazuri. Există multe modalitate de a atinge obiectivul dvs., dar vă voi arăta filtru de parametri de interogare.

Puteți suprascrie get_queryset() de-a face cu Url-uri, cum ar fi http://yourdoamin.com/api/ratings?product=1 ( aici presupunem că doriți să filtrați prin id-ul produsului ).

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

Desigur, puteți adăuga mai multe if/elif/else bloc să se ocupe de mai mulți parametri de interogare.

Puteți folosi, de asemenea, o metodă similară : La SearchFilter clasa a atinge același obiectiv.

Mai multe informatii pe DRF filtrare documentația

2021-11-24 10:00:31

În alte limbi

Această pagină este în alte limbi

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