Я добавил в свой app / assets / application.js следующий код javascript, чтобы переписать URL-адрес на весь сайт.
$(document).ready(function () {
if (window.location.href.indexOf('#') > 0) {
window.location = window.location.href.replace(/#/, '?');
}
});
Вы можете использовать list_display и list_filter в admin.py следующим образом:
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name',)
list_filter = ('company__name', 'first_name',) # company is a model which has relation to the Person model
Затем в вашем admin.py вы должны добавить PersonAdmin к вашей модели:
admin.site.register(Person, PersonAdmin)
У меня точно такая же потребность; вот самый простой способ, которым я дошел до сих пор.
В списках администратора есть 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 все еще работает.
Итак, теперь мы знаем, что единственное, что нам нужно, это передать param artist __id__exact = XX, поэтому мы должны добавить для этого столбец с кнопкой.
class ArtistAdmin(admin.ModelAdmin):
list_display = ('artistName', 'genre', 'artists_list_field')
def artists_list_field(self, obj):
return mark_safe(u'<a href="../../%s/%s?artist_id__exact=%d">Albums</a>' % (
'music_library', 'album', obj.id))
С этим у вас все работает, но это не очень хорошая практика, потому что мы жестко программируем URL. Вместо «music_library» и «album» мы должны динамически передавать фактическое имя приложения и модели. Это то, что я сейчас исследую. Например, если другая модель находится в том же приложении (как в вашем случае), для имени приложения это выглядит так:
u'<a href="../../%s/%s?artist_id__exact=%d">Albums</a>' % (
obj._meta.app_label, 'album', obj.id)
Я надеюсь, что это полезно!