Просто используйте JavaScript для динамического скрытия / показа встроенного набора.Идентификатор встроенного набора всегда #[related_name]-group
.
(function($){
$(document).ready(function(){
function togglePictureInline(selected) {
$.getJSON('/ajax/category-type/', { id: selected }, function (data, jqXHR) {
if (data[0].fields.type == 1)
$('#pictures-group').show();
else
$('#pictures-group').hide();
});
}
var $category = $('#id_category');
togglePictureInline($category.val());
$category.change(function(){
togglePictureInline($(this).val());
});
});
})(django.jQuery);
yourapp / views.py
from django.shortcuts import get_list_or_404
from django.core import serializers
def ajax_category_type(request):
id = request.GET.get('id')
categories = get_list_or_404(Category, id=id)
data = serializers.serialize('json', categories, fields=('type',))
return HttpResponse(data, mimetype='application/json')
Добавьте следующее к VideoAdmin
:
class VideoAdmin(admin.ModelAdmin):
...
class Media:
js = ('path/to/this.js',)
Или переопределить templates/yourapp/video/change_form.html
с помощью:
{% extends 'admin/change_form.html' %}
{% block extrahead %}
{{ block.super }}
<script src="path/to/this.js" type="text/javascript"></script>
{% endblock %}
ОБНОВЛЕНИЕ:
Я изменил JavaScript выше, чтобы включить запрос AJAX,Вам придется использовать AJAX, потому что вам нужно выбрать выбранную категорию, прежде чем вы сможете получить ее тип.Я также добавил базовый вид, который вы можете использовать, чтобы вернуть нужные вам данные.Вам просто нужно подключить представление в вашем urls.py и изменить URL в вызове AJAX, чтобы он соответствовал.