Django. Добавить метод в ModelAdmin fieldset
Не получается добавить метод в ModelAdmin fieldset.
Django 3.1.1
Python 3.6
Делаю так:
class ObjectAdmin(admin.ModelAdmin):
list_display = ('id', 'number')
fieldsets = (('Area', {'fields': ('calc_area', )}), )
readonly_fields = ('calc_area', )
def calc_area(self, obj):
return 100
calc_area.short_description = 'Площадь'
calc_area.allow_tags = 'True'
Получаю ошибку:
django.core.exceptions.FieldError: Unknown field(s) (calc_area) specified for Object. Check fields/fieldsets/exclude attributes of class ObjectAdmin.
Причём в list_display calc_area добавляется без проблем.
Ответы (1 шт):
в list_fields отображаются поля, которые формируются в ModelAdmin
fieldsets же отвечает уже за формировании формы, которая будет отображаться при редактировании. Соответственно поля там ты должен указывать поля, которые есть в классе ModelForm для редактирования этой модели.
если тебе нужно какое-то вычисляемое поле чисто для информации Можно либо подправить html шаблон формы, что бы выводить нужную тебе информацию, либо сделать как-то так:
class ObjectEditForm(forms.ModelForm):
calc_area = forms.CharField(label='вычисляемое поле', required=False, widget=forms.TextInput(attrs={'disabled': 'disabled', 'readonly': True})
class Meta:
model = Object
fields = ('calc_area', 'Field1', ..., )
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['calc_area'].initial = 100
после того как ты в форме добавил вычисляемое поле, ты можешь использовать его в fieldset.
p.s.: не забудь добавить эту форму в ModelAdmin
class ObjectAdmin(admin.ModelAdmin):
form = ObjectEditForm