我正在写一个曲棍球数据库/经理。所以我有以下模型:
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))
所以现在只缺少过滤。有什么想法吗?
答案 0 :(得分:0)
有趣的问题。对这类事情做的第一件事是查看源代码,这通常是非常好的评论。
看起来ModelAdmin
有一个方法get_changelist
,它返回一个用于创建更改列表页面的类。默认情况下,它只会从ChangeList
返回django.contrib.admin.views.main
类。反过来,该类有一个方法get_filters
,它似乎是返回过滤器侧边栏值的方法。
因此,您需要做的是使用覆盖的ChangeList
方法创建一个get_filters
子类,该方法仅返回您想要的值。然后,在ModelAdmin
子类中,覆盖get_changelist
以返回您的ChangeList子类(注意,您需要返回类本身,而不是实例)。