Zestaw modeli w django

0

Pytanie

Jestem nowy w rest-frameworku Django. Używam Modelviewset do tworzenia API dla projektu. Chcę uzyskać listę rzeczy nie według identyfikatora, i dla tego używam polu lookup_field. Ale to tylko zwrot 1 obiektu. Jak mogę dostosować go do zwrotu многообъектного obiektu?

to 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 są moje poglądy

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

To mój serializacja

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

Proszę, pomóżcie mi rozwiązać ten problem. Wielkie dzięki

1

Najlepsza odpowiedź

1

Chcesz użyć filtra w api i zwracać kilku obiektów. Ale lookup_field służy do wyszukiwania obiektów pojedynczych egzemplarzy modelu. Istnieje wiele sposobów, aby osiągnąć swój cel, ale pokażę ci , że filtr w parametrach żądania.

Można zastąpić get_queryset() do pracy z adresami URL, takie jak http://yourdoamin.com/api/ratings?product=1 ( tu zakładamy, że chcesz filtrować według identyfikatora 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

Oczywiście, można dodać wiele if/elif/else blok do przetwarzania wielu parametrów zapytania.

Można również korzystać z podobną metodę : klasa SearchFilter dla osiągnięcia tego samego celu.

Dodatkowe informacje na temat dokumentacji filtrowania DRF

2021-11-24 10:00:31

W innych językach

Ta strona jest w innych językach

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