У меня точно такая же потребность;вот самый простой способ, который я до сих пор придумал.
В списках администраторов есть list_filter , с помощью которых вы можете, например, сделать это (при условии, что вы зарегистрируете классы администратора и т. д.):
class AlbumAdmin(admin.ModelAdmin):
list_display = ('artist', 'albumName', 'year',)
list_filter = ('artist',)
Это добавит правый столбец на вашем административном сайте со списком исполнителей, и если вы нажмете на него, список альбомов будет отфильтрован, чтобы показать только те, которые сделаны этим исполнителем.
Имея это, и вот хитрость, получается, что даже если вы не объявите "list_filter", Django все равно будет фильтровать вещи в соответствии с параметрами URL.Итак, я активировал фильтры, я нажал на одного из моих «художников», поэтому список был отфильтрован, и я мог видеть, как он форматирует URL, что-то вроде […] / admin / app_name / model_name /? ForeignKeyName__id__exact = XX
В вашем случае я представляю, что это будет выглядеть примерно так: […] / admin / music_library / album /? Artist__id__exact = XX
Попробуйте выполнить следующие действия, затем удалите строку «list_filter», и вы увидите, что URL все еще работает.
Итак, теперь мы знаем, что единственное, что нам нужно, это передать параметр artist__id__exact = XX, поэтому мы должны добавить для этого столбец с кнопкой.
class ArtistAdmin(admin.ModelAdmin):
list_display = ('artistName', 'genre', 'artists_list_field')
def artists_list_field(self, obj):
base_url = reverse('admin:music_library_album_changelist')
return mark_safe(u'<a href="%s?artist_id__exact=%d">Albums</a>' % (
base_url, obj.id))
С этим у вас все работает.Я надеюсь, что это полезно!