__in过滤器不起作用

时间:2011-09-06 11:41:11

标签: django django-admin-filters

我继承了一个提供高中体育信息的Django应用程序。我最近收到了修改某一组数据的请求,因此只显示当前季节的信息,我这样做了:

teams = Team.objects.filter(season__school_year__in=school_year_filter_list)

school_year_filter_list包含[1,3]

此查询导致pgpool(Postgres数据库池/复制实用程序)中的错误,因此我无法使用它。作为旁注,查询在Python shell中正常工作,当我绕过pgpool并直接使用Postgres时。但是,我们的网络架构决定了pgpool的使用,所以我试图找到另一种方法来检索相同的数据。

你能否帮助我确定在当前的SchoolYear中让所有球队获得一个赛季的另一种方式?

(简化)模型如下所示:

class Team(models.Model):
    season = models.ForeignKey(Season)

class Season(models.Model):
    school_year = models.ForeignKey(SchoolYear, blank=True, null=True)

class SchoolYear(models.Model):
    school_year = models.CharField(max_length=150)

'_schoolyear'表格如下:

 id | school_year 
----+-------------
  1 | 2010-2011
  2 | 2009-2010
  3 | 2011-2012

3 个答案:

答案 0 :(得分:1)

最后,我修改了另一个模型来完成这项工作。我没有解析年份以获得活跃的季节,而是在SchoolYear模型中添加了一个“活动”标志,并修改了我的查询以检查该标志:

def queryset(self, request):
    qs = super(PlayerYearAdmin, self).queryset(request)
    return qs.filter(team__season__school_year__active=True)

答案 1 :(得分:0)

你试过试试吗? teams = Team.objects.filter(season__school_year__id__in=school_year_filter_list) ? 你的school_year_filter_list是学年ID列表是不是正确的?

答案 2 :(得分:0)

小注意:我看到'django-admin'标签,所以我认为你将= _ [1,2]中的season__school_year_ 添加到URL查询字符串中,例如/ admin / sports / team /?season _school_year__in = [1,2]这是对的吗?

如果是,您是否确定school_year_filter_list包含列表[1,3],而不是包含列表repr的{​​{1}}的字符串

您能否向我们提供有关pgpool或Django ORM返回错误的数据?