覆盖构建过滤器侧栏的查询集

时间:2010-05-02 11:36:47

标签: django django-admin

我正在写一个曲棍球数据库/经理。所以我有以下模型:

class Team(models.Model):
   name = models.CharField(max_length=60)

class Game(models.Model):
   home_team = models.ForeignKey(Team,related_name='home_team')
   away_team = models.ForeignKey(Team,related_name='away_team')

class SeasonStats(models.Model):
   team = models.ForeignKey(Team)

好的,我的问题如下。有很多团队,但统计数据只是为我的俱乐部管理。因此,如果我在管理后端使用“list_display”,我想修改/覆盖构建侧边栏进行过滤的查询集,只显示我们的主队作为过滤选项。
这在Django中是否可行?

我已经制作了像这样的自定义表单

class SeasonPlayerStatsAdminForm(forms.ModelForm):
   team = forms.ModelChoiceField(Team.objects.filter(club__home=True))

所以现在只缺少过滤。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

有趣的问题。对这类事情做的第一件事是查看源代码,这通常是非常好的评论。

看起来ModelAdmin有一个方法get_changelist,它返回一个用于创建更改列表页面的类。默认情况下,它只会从ChangeList返回django.contrib.admin.views.main类。反过来,该类有一个方法get_filters,它似乎是返回过滤器侧边栏值的方法。

因此,您需要做的是使用覆盖的ChangeList方法创建一个get_filters子类,该方法仅返回您想要的值。然后,在ModelAdmin子类中,覆盖get_changelist以返回您的ChangeList子类(注意,您需要返回本身,而不是实例)。

相关问题