开发者

Overwrite queryset which builds filter sidebar

I'm writing a hockey database/manager. So I have the following models:

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)

Ok, so my problem is the following. There are a lot of teams, but Stats are just managed for my Club. So if I use "list_display" in the admin backend, I'd like to modify/overwrite the queryset which builds the sidebar for filtering, to just display our home teams as a filter option.

Is this somehow possible in Django?

I already made a custom form like this

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

So now just the filtering is missing. Any ideas?


Interesting question. The first thing to do with this sort of thing is to look at the source, which is usually very well-commented.

It looks like ModelAdmin has a method get_changelist, which returns a class to use to create the changelist page. By default, that simply returns the ChangeList class from django.contrib.admin.views.main. In turn, that class has a method get_filters which appears to be the one that returns the values for the filter sidebar.

So, what you would need to do is to create a ChangeList subclass with an overwritten get_filters method that only returns the values you want. Then, in your ModelAdmin subclass, overwrite get_changelist to return your ChangeList subclass (note, you need to return the class itself, not an instance).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜