Python django rest框架中的多对多过滤器
我对筛选和检索多对多相关的数据有一个问题 models.pyPython django rest框架中的多对多过滤器,python,django,python-3.x,django-rest-framework,postman,Python,Django,Python 3.x,Django Rest Framework,Postman,我对筛选和检索多对多相关的数据有一个问题 models.py class Team(models.Model): name = models.CharField(blank=True, unique=True, max_length=100) players = models.ManyToManyField(User, blank=True, related_name='players') 赛里泽斯酒店 class MyTeamListSerializer(ModelSeria
class Team(models.Model):
name = models.CharField(blank=True, unique=True, max_length=100)
players = models.ManyToManyField(User, blank=True, related_name='players')
赛里泽斯酒店
class MyTeamListSerializer(ModelSerializer):
class Meta:
model = Team
fields = ['name']
views.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框架的新手
所以,请任何人都有解决方案,请在我的情况下帮助我,或者如果你有另一个解决方案来做我想做的事
如果您需要获取特定球员的球队列表,请使用
精确的查找,而不是包含的:
class TeamFilter(django_filters.FilterSet):
teams = django_filters.NumberFilter(
field_name='players_id',
lookup_type='exact',
)
class Meta:
model = Team
fields = ('players', 'teams',)
还可以使用字段名称
作为参数,而不是玩家
如果只想显示当前用户的团队,最好使用视图的get\u queryset
方法:
class MyTeamListAPIView(ListAPIView):
serializer_class = MyTeamListSerializer
permission_classes = [IsOwnerOrReadOnly]
pagination_class = ProfileLimitPagination
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('players')
filter_class = TeamFilter
def get_queryset(self):
return Team.objects.filter(players=self.request.user)
感谢您的快速回复,但我问自己是否希望获得特定玩家的团队(请求者)。我只需要与请求用户相关的团队,用其他语言,只需要我的团队。第一个问题,你的代码服务于这一点?第二,如何在过滤器中获取requset.user?许多的thanks@hishamDigital在这种情况下,最好覆盖视图的get\u queryset
方法。检查更新的答案。非常感谢@neverwanner更新的答案对我很好。真的非常感谢btwreturn Team.objects.filter(players\u-exact=self.request.user)
我从players\u-exact
中删除了exact
以确保工作无误再次感谢