Django: изменение поля стандартного вида

Всем снова привет. Как это ни странно сейчас все мое внимание уделено исключительно разработке приложений основанных на web framework Django. Причиной перехода на django является разработке и ведению нового проекта, который наша компания делает для украинской компании. Надеюсь что мы выиграем с этим проектом.

Но это всего лишь отступление. Важной частью разработки является кастомизация некоторых элементов любого сайта использующих какой-бы то ни было фреймворк. Будь то Smarty, Zend Framework, Symphony. Без разницы, все они предоставляют строгий набор элементов, которые используются в проекте. А что делать если нас не устраивает этот набор и необходимо пополнить его своими причиндалами.

В django 1.0 были сделаны некоторые очень полезные добавления, которых я ждал. Введение save_model метода в ModelAdmin класс избавило от написания менеджеров. Что же дает нам ModelAdmin для кастомизации полей?

Любой вам даст совет рыть исходники Django, и что собственно и было сделано. В ModelAdmin есть метод get_form который вернет экземпляр класса формы которая используется в административном интерфейсе. А что если переопределить эту функцию? Выйдет примерно следующее

  1. class MyModelAdmin(admin.ModelAdmin):
  2.     list_display = (‘title’, ‘latin_title’, ‘recipe’)
  3.     prepopulated_fields = {"url": ("latin_title", )}
  4.    
  5.     form = MyModelAdminForm
  6.        
  7.     def get_form(self, request, obj=None, **kwargs):
  8.         form = super(MyModelAdmin, self).get_form(request, obj=None, **kwargs)
  9.        
  10.         form.base_fields[‘custom’].widget = MyWidget(obj)
  11.         return form
  12.    
  13. admin.site.register(Medicine, MedicineAdmin)

То что доктор прописал, не так ли? Данного подхода в документации я не нашел, зато на сайте http://djangosnippets.org есть отличный пример, который использует подобную технику.