如何使用FilterUserMixin在Djang中过滤一个字段或另一个字段

2024-09-19 23:44:05 发布

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

我使用FilterUserMixin来过滤表单中的数据。我有一个“游戏”模型,它的属性是“team1”和“team2”。我希望过滤器能够获取列表中某个团队为team1或team2的所有游戏。我的过滤器如下所示:

class GamesFilter(FilterUserMixin):
   name = django_filters.CharFilter(method='filter_name', label='Team name')
   def filter_name(self,queryset,name,value):
       queryset = queryset.filter(team2=value) | queryset.filter(team1=value)
       return queryset
   class Meta:
       model = Game
       fields = ('team1','team2',)

该过滤器确实会出现在表单中,它会显示所有注册的球队(这是一个ModelChoiceField,所以是一个列表,而不是要键入的字符字段),并且它会正确地显示比赛,但只显示那些搜索到的球队在“team1”字段中的球队,而不是“team2”。你有什么想法吗?我对这个比较陌生,尝试过一些不成功的事情


Tags: 数据name模型游戏过滤器表单列表value
2条回答

我发现了问题所在。方法的名称(filter_name)是从不同模型的不同筛选器复制的,该筛选器具有属性name。我将方法名更改为filter_team1,突然它工作了,即使在filter_team1方法本身中我同时使用了team1team2属性

from django.db.models import Q
queryset = queryset.filter(Q(team2=value) | Q(team1=value))

您可以检查引用:How to perform OR condition in django queryset?

相关问题 更多 >