Я нашел способ, который переопределяет change_form.html администратора для добавления некоторого кода jQuery для его выполнения.
/ project_dir / шаблоны / администратор / APP_NAME / MODEL_NAME / change_form.html
{% extends "admin/change_form.html" %}
{% block extrahead %}
{{ block.super }}
<script>
jQuery(document).ready(function ($) {
$( "select#id_aid" ).change(function() {
$.getJSON("/api/getAlbumRelatedDoc/",{id: $(this).val()}, function(j){
for (var i = 0; i < j.length; i++) {
options = '<option value="' + j[i].doc + '">' + j[i].doc__name + '</option>';
}
$("select#id_doc").html(options);
$("span#select2-id_doc-container").html(j[0].doc__name)
});
});
});
</script>
{% endblock %}
/ project_dir / APP_NAME / views.py
@api_view(['GET', 'POST'])
def get_album_relate_doc(request):
id = request.GET.get('id','')
result = list(Album.objects.filter(id=int(id)).values('doc', 'doc__name'))
return HttpResponse(json.dumps(result), content_type="application/json")
/ project_dir / APP_NAME / urls.py
path('getAlbumRelatedDoc/', views.get_album_relate_doc),
Кстати, я использую django-jet в качестве замены администратора.