У меня проблема, очень похожая на описанную в этот вопрос . Я реализовал решение нескольких наборов полей, и оно работает довольно хорошо. Однако, я сталкиваюсь с проблемой, когда пытаюсь добавить поля, которые принадлежат нескольким наборам полей:
(admin.E012) There are duplicate field(s) in 'fieldsets[2][1]'.
item_field2
требуется в foo
и bar
, но не baz
(следовательно, оно не может быть в начальном наборе полей). Я вижу, как это проблема, но не уверен, как обойти это.
admin.py
from django.contrib import admin
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
fieldsets = (
# This first fieldset is always displayed
(None, {
'classes': ('item',),
'fields': ('item_type') # type is a select input with 'foo' and 'bar' options
}),
# Only one of the below fieldsets are displayed, depending on which item_type is chosen from the above select input
(None, {
'classes': ('foo',),
'fields': ('item_field1, item_field2')
}),
(None, {
'classes': ('bar',),
'fields': ('item_field2, item_field3')
}),
(None, {
'classes': ('baz',),
'fields': ('item_field4')
})
)
class Media:
js = ('admin.js',)
admin. js
window.addEventListener('load', function() {
(function($) {
var selectField = $('#id_item_type')
var foo = $('.foo');
var bar = $('.bar');
var baz = $('.baz');
function toggleVerified(value) {
if (value === '1') { // 'foo' selected
foo.show();
bar.hide();
baz.hide();
}
else if (value === '2') { // 'bar' selected
foo.hide();
bar.show();
baz.hide();
}
else if (value === '3') { // 'baz' selected
foo.hide();
bar.hide();
baz.show();
}
else { // Nothing selected yet
bar.hide();
foo.hide();
baz.hide();
}
}
// show/hide on load based on pervious value of selectField
toggleVerified(selectField.val());
// show/hide on change
selectField.change(function() {
toggleVerified($(this).val());
});
})(django.jQuery);
});