Как вызвать метод модели в наборах полей django ModelAdmin?
Я хочу, чтобы отобразить встроенную карту в форме администратора, когда данные уже есть в БД. У меня есть следующий код:
models.py
class Address(models.Model):
address = models.CharField()
def address_2_html(self):
if self.address:
# Return html for an embedded map using the entered address.
return embedded_map_html
else:
return ''
address_2_html.allow_tags = True
admin.py
class AddressAdmin(admin.ModelAdmin):
fieldsets = [(label, {'fields': ['address','address_2_html']}),]
Это не сработает. Я получаю сообщение об ошибке:
'AddressAdmin.fieldsets[1][1]['fields']' refers to field 'address_2_html' that is missing from the form.
еще одна вещь, которую я пытался использовать, - это Параметр "Описание" для "наборов полей", однако "address_2_html" недоступен в области AddressAdmin. Мне удалось внедрить статическую карту, используя "описание", которое было круто, но недостаточно круто.
2 ответов
вот так (по памяти):
class AddressAdmin(admin.ModelAdmin):
fieldsets = [(label, {'fields': ['address','address_2_html']}),]
readonly_fields = ['address_2_html']
def address_2_html(self, obj):
return obj.address_2_html()
address_2_html.allow_tags = True
address_2_html.short_description = 'Address display'
проблема решена путем переопределения get_fieldsets (), так как метод get_fieldsets () позволяет получить доступ к адресу объекта модели.
def get_fieldsets(self, request, obj=None):
fs = [
(self.label, {'fields': ['address',]}),
('Map', {'fields': [], # required by django admin
'description':obj.address_2_html(),
}),
]
return fs