Django rest fram中的多对多滤波器

2024-09-29 19:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于过滤检索多对多数据的问题

在模型.py在

class Team(models.Model):
    name = models.CharField(blank=True, unique=True, max_length=100)
    players = models.ManyToManyField(User, blank=True, related_name='players')

在sealizers.py在

^{pr2}$

在视图.py在

class MyTeamListAPIView(ListAPIView):
    queryset = Team.objects.all()
    serializer_class = MyTeamListSerializer
    permission_classes = [IsOwnerOrReadOnly]
    pagination_class = ProfileLimitPagination
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('players')
    filter_class = TeamFilter

在过滤器.py在

class TeamFilter(django_filters.FilterSet):
    teams = django_filters.CharFilter(
        players='players__id',
        lookup_type='contains',
    )

    class Meta:
        model = Team
        fields = ('players', 'teams',)

现在,我要做的是,检索我所参加的球队的名单。在

所以我想请求我的团队得到我团队的响应列表。在

我不知道确切的问题是什么,但我是django rest框架中的新成员。在

所以,请任何人都有解决方案请帮助我在我的情况下,或如果你有另一个解决方案做我想做的。在

谢谢


Tags: djangonamepytruefieldsmodelsfilter团队
1条回答
网友
1楼 · 发布于 2024-09-29 19:27:33

如果需要获取特定球员的球队列表,请使用exact查找,而不是contains

class TeamFilter(django_filters.FilterSet):
    teams = django_filters.NumberFilter(
        field_name='players_id',
        lookup_type='exact',
    )

    class Meta:
        model = Team
        fields = ('players', 'teams',)

也使用field_name作为参数,而不是players。在

如果只想显示当前用户的团队,则最好覆盖视图的get_queryset方法:

^{pr2}$

相关问题 更多 >

    热门问题