Мне нужно, в зависимости от начального значения одного из полей формы админки, создавать нужное количество доп полей, заполнив их значениями из БД. По запросу создания динамических полей админки джанго гугл выдал несколько вариантов решения, например вот этот и ещё вот этот. Суть у них одна и та-же - переопределить метод get_fieldsets класса admin.ModelAdmin.
У меня не сработало. Вот на такой код:
class DeviceAdmin(admin.ModelAdmin): form = MyDeviceAdminForm def get_fieldsets(self, request, obj=None): fieldsets = super(DeviceAdmin, self).get_fieldsets(request, obj) fieldsets[0][1]['fields'] += ('foo',) return fieldsets
class MyDeviceAdminForm(forms.ModelForm): class Meta: model = Device def __init__(self, *args, **kwargs): super(MyDeviceAdminForm, self).__init__(*args, **kwargs) self.fields['foo'] = forms.IntegerField(label="foo")
Я получаю ошибку “Unknown field(s) (item_type) specified for Device. Check fields/fieldsets/exclude attributes of class DeviceAdmin”. И дальше не знаю в какую сторону рыть. По этой ошибке гугл ничего внятного не выдаёт и, насколько я понял, где-то нужно дополнительно определить это новое поле. Я пробовал ставить точку останова в начале конструктора класса MyDeviceAdminForm чтобы посмотреть значения полей, но джанго выдаёт ошибку раньше и эта точка останова не срабатывает.
Моих знаний здесь явно не достаточно, уже дошёл до мысли переписать эту часть админки, но как то этот вариант похож на изобретение велосипеда и не очень радует. Товарищи, кто знает джанго глубже, помогите пожалуйста, буду очень признателен!