Это сделано через довольно простой JavaScript.
Они отслеживают идентификатор последнего установленного флажка и когда, когда другой флажок проверяется, они используют shiftKey атрибут события , чтобы видеть, был ли сдвиг сохранен при нажатии на флажок. Раз так они устанавливают проверенное свойство каждого флажка, промежуточного два к истинному.
Для определения, когда флажок устанавливается, они, вероятно, используют событие onclick на флажках
Вы можете определить собственный метод для использования в списке изменений, который возвращает HTML-код ссылки.
from django.core.urlresolvers import reverse
class MyFooAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar_link')
def bar_link(self, obj):
url = reverse('admin:myapp_bar_change', args=(obj.pk,))
return '<a href="%s">Edit Bar</a>' % url
bar_link.allow_tags = True
Одна проблема с вашим вопросом, как указано - если Foo имеет внешний ключ для Bar, то каждый foo ссылается на одну панель, так что вы можете ссылаться на страницу редактирования для этой панели. Однако каждая панель ссылается на несколько файлов foo, поэтому нет смысла запрашивать ссылку на «страницу редактирования экземпляра Foo». Что вы можете сделать, так это создать ссылку на страницу списка изменений для Foo с фильтром, настроенным так, чтобы показывать только экземпляры, которые ссылаются на эту панель:
def foo_link(self, obj):
url = reverse('admin:myapp_foo_changelist')
return '<a href="%s?bar=%s">See Foos</a>' % (url, obj.pk)
foo_link.allow_tags = True