Набор моделей в django

0

Вопрос

Я новичок в рест-фреймворке Django. Я использую Modelviewset для создания API для проекта. Я хочу получить список вещей не по идентификатору, и для этого я использую поле lookup_field. Но это всего лишь возврат 1 объекта. Как я могу настроить его для возврата многообъектного объекта?

это моя модель

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)

Это мои взгляды

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

Это мой сериализатор

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

Пожалуйста, помогите мне решить эту проблему. Большое спасибо

1

Лучший ответ

1

Вы хотите использовать фильтр в api и возвращать несколько объектов. Но lookup_field используется для выполнения поиска объектов отдельных экземпляров модели. Существует много способов достижения вашей цели, но я покажу вам фильтр по параметрам запроса.

Вы можете переопределить get_queryset() для работы с URL-адресами, такими как http://yourdoamin.com/api/ratings?product=1 ( здесь мы предполагаем, что вы хотите фильтровать по идентификатору продукта ).

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

Конечно, вы можете добавить много if/elif/else блок для обработки многих параметров запроса.

Вы также можете использовать аналогичный метод : класс SearchFilter для достижения той же цели.

Дополнительная информация о документации по фильтрации DRF

2021-11-24 10:00:31

На других языках

Эта страница на других языках

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