ModelViewset v django

0

Otázka

Som nováčik z Django Zvyšok-rámec. Používam Modelviewset na vytvorenie API pre projekt. Chcem získať zoznam vec, ktorá nie je podľa id a používam lookup_field k tomu, že. Ale to je len return 1 objekt. Ako môžem vlastné ho vrátiť multible objekt?

toto je môj model

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)

To je môj názor

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

Toto je môj Serializer

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

Prosím, pomôžte mi, aby sovle tento problém. Ďakujem vám veľmi pekne

1

Najlepšiu odpoveď

1

Chcete použiť filter na api a vrátiť sa viaceré objekty. Ale lookup_field sa používa na vykonávanie objekt vyhľadávanie jednotlivých modelových prípadoch. Existuje mnoho spôsob, ako dosiahnuť svoj cieľ, ale ukážem vám, filter podľa parametrov dopytu.

Môžete prepísať get_queryset() vysporiadať sa s adresami Url, ako napríklad http://yourdoamin.com/api/ratings?product=1 ( tu predpokladáme, že chcete filtrovať podľa id produktu ).

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

Samozrejme, môžete pridať viac if/elif/else blok tak, aby zvládli parametre dopytu.

Môžete tiež použiť podobný postup : Na SearchFilter triedy na dosiahnutie rovnakého cieľa.

Viac info na DRF filtrovanie dokumentácia

2021-11-24 10:00:31

V iných jazykoch

Táto stránka je v iných jazykoch

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