ModelViewset в django
Меня зовут Лео и я новичок в Django Rest-framework. Я использую Modelviewset для создания API для проекта. Я хочу получить список вещей не по id, и я использую 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"
Пожалуйста, помогите мне решить эту проблему. Большое спасибо
Вы хотите использовать фильтр на api и вернуть несколько объектов. Но lookup_field
используется для выполнения поиска объектов в отдельных экземплярах модели .
Есть много способов достижения вашей цели, но я покажу вам фильтр по параметрам запроса.
Вы можете переопределить get_queryset()
для работы с URL, такими как http://yourdoamin.com/api/ratings?product=1
(здесь мы предполагаем, что вы хотите фильтровать по id товара).
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