为什么我没有使用Django过滤结果?

时间:2018-02-17 10:23:14

标签: django django-filter

我正在尝试过滤一些数据,并使用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")

1 个答案:

答案 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