我正在尝试过滤一些数据,并使用django过滤器来完成它。
我的一个模型字段是外键,它自动使用ModelChoiceFilter
。在我的情况下,我需要从特定过滤器中选择多个选项,因此我使用ModelMultipleChoiceFilter
。
如果手动实例化,queryset
参数需要在ModelMultipleChoiceFilter
中传递。
我正在尝试使用下面的代码实现此目的,但是使用特定的过滤器我没有得到任何结果。虽然我从其他过滤器中得到了正确的结果:
filters.py
def available_bookies(request):
""" Return available bookies
for current user
"""
if request is None:
return Bet.objects.none()
user = request.user
return Bet.objects.filter(user=user).values_list("bookie__name", flat=True).distinct()
class BetFilter(django_filters.FilterSet):
# Some other filters
bookie = django_filters.ModelMultipleChoiceFilter(queryset=available_bookies)
class Meta:
model = Bet
fields = ["date_from", "date_to", "odds_from", "odds_to",
"stake_from", "stake_to", "country_multi",
"competition_multi", "sport_multi", "status_multi",
"home_multi", "visitor_multi", "bookie"]
@property
def qs(self):
parent = super(BetFilter, self).qs
return parent.order_by("-timestamp")
答案 0 :(得分:0)
您需要确保您的过滤器字段获取查询集。您所写的可调用者返回一个列表,因此我怀疑这是您的问题,因为您所做的与docs匹配。因此,请尝试调整它以返回查询集;
body,
html {
height: 100%;
margin: 0;
}
body {
background-image:url("https://lorempixel.com/100/100/"), url("https://78.media.tumblr.com/9eda2a03998298df51259dc81b0dc0ad/tumblr_p49iilKTmk1x5vw3ao1_1280.jpg");
height: 100%;
background-position: top left,center;
background-repeat: no-repeat;
background-size: auto,cover;
}
您可以为过滤器提供def available_bookies(request):
""" Return available bookies
for current user
"""
if request is None:
return Bet.objects.all()
if request.user:
user = request.user
return Bet.objects.filter(user=user)
return Bet.objects.all()
属性,以定制该字段的过滤器的工作方式。我为我的一些人做了这个,所以你做这样的事情来过滤那个用户;
method