根据查询参数过滤,多对多

时间:2020-07-23 10:36:28

标签: python django django-rest-framework

我想按ID过滤URL中的查询参数。

例如:http://.../game/?category = 1&level = 1。这是我的一些代码:


models.py

class Game(models.Model):
    name = models.CharField(max_length=100) 
    category = models.ForeignKey(Categories, on_delete=models.CASCADE)
    level = models.ManyToManyField(Level)

views.py

class GamesListView(generics.ListAPIView):
    serializer_class = GamesListSerializer

    def get_queryset(self):
        queryset = Games.objects.all()
        category = self.request.query_params.get('category')
        level = self.request.query_params.get('level')

        if category:
            queryset = queryset.filter(category_id=category)

如何过滤与游戏中多对多关系相关的关卡?

1 个答案:

答案 0 :(得分:0)

您可以使用level=id_of_level进行过滤,也可以使用level__id=id_of_level。因此,您可以通过以下方式实现此目标:

class GamesListView(generics.ListAPIView):
    serializer_class = GamesListSerializer

    def get_queryset(self):
        queryset = Games.objects.all()
        category = self.request.query_params.get('category')
        level = self.request.query_params.get('level')

        if category:
            queryset = queryset.filter(category_id=category)
        if level:
            queryset = queryset.filter(level=level)
        return queryset