Django'da ModelViewset

0

Soru

Django Rest-framework'te yeniyim. Proje için API oluşturmak için Modelviewset kullanıyorum. Kimliğe göre olmayan şeylerin listesini almak istiyorum ve bunu yapmak için lookup_field kullanıyorum. Ancak bu sadece 1 nesneyi döndürür. Çoklu nesneyi döndürmek için nasıl özelleştirebilirim?

bu model benim

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)

Bu görüş benim

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

Bu benim Serileştiricim

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

Lütfen bu sorunu çözmeme yardım edin. Çok teşekkür ederim

1

En iyi cevabı

1

Apı'de filtre kullanmak ve birden çok nesne döndürmek istiyorsunuz. Ama lookup_field tek tek model örneklerinin nesne aramasını gerçekleştirmek için kullanılır. Orada birçok şekilde elde gol, ama ben göstermek filtre ile sorgu parametreleri.

Geçersiz kılabilirsiniz get_queryset() aşağıdaki gibi url'lerle başa çıkmak için http://yourdoamin.com/api/ratings?product=1 ( burada ürün kimliğine göre filtrelemek istediğinizi varsayıyoruz ).

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

Tabii ki, birçok ekleyebilirsiniz if/elif/else birçok sorgu parametresini işlemek için engelle.

Benzer bir yöntemi de kullanabilirsiniz: Aynı hedefe ulaşmak için SearchFilter sınıfı.

DRF filtreleme belgeleri hakkında daha fazla bilgi

2021-11-24 10:00:31

Diğer dillerde

Bu sayfa diğer dillerde

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