Похоже, что вы хотите, чтобы параметры Департамента были только теми, которые ForeignKey'ed для группы? Стандартный ответ: администратор сайта предназначен только для простых операций CRUD.
Но делать то, что ты должен делать, скучно.
Возможно, вы могли бы преодолеть это ограничение с помощью некоторого ниндзя-JavaScript и JSON.
Итак, прежде всего нам нужен API, который может сообщить нам, какие отделы доступны для каждой группы.
def api_departments_from_group(request, group_id):
departments = Department.objects.filter(group__id=group_id)
return json(departments) # Note: serialize, however
Как только API будет установлен, мы можем добавить немного javascript, чтобы изменить <option>
в отделе, выберите ...
$(function() {
// On page load...
if ($('#id_group')) {
// Trap when the group box is changed
$('#id_group').bind('blur', function() {
$.getJSON('/api/get-departments/' + $('#id_group').val() + '/', function(data) {
// Clear existing options
$('#id_department').children().remove();
// Parse JSON and turn into <option> tags
$.each(data, function(i, item) {
$('#id_department').append('<option>' + item.name + '</option>');
});
});
});
}
});
Сохраните это в admin-ninja.js. Затем вы можете включить его в модель администратора ...
class EmployeeAdmin(models.ModelAdmin):
# ...
class Media:
js = ('/media/admin-ninja.js',)
Да, так что я не проверял ни капли этого, но, надеюсь, вы можете получить некоторые идеи. Кроме того, мне ничего не понравилось, например, в javascript не учитывается вариант, который уже был выбран (а затем повторно выбран).