Posts

Showing posts from November, 2012

Кастомізація полів у Джанго адмінці

Якщо нам недостатньо автоматичного налаштування форматування полів форми редагування сутності (адмінка), то в Джанго для цього приводу існує декілька цікавиз можливостей. Загалом, для початку, слід сказати, що форматувати поля допомагають спеціальні класи, які називаються widget И Пошукайте файл widgets.py - він розпоовість вам багато цікавого. Отже завдання: Збільшити поле, яке дозволяє вибирати декілька варіантів (віддзеркалює зв’язок ManyToMany в базі данних, а клас форми (віджет), який реалізує поле в формі - SelectMultiple) class ProductAdmin(admin.ModelAdmin): formfield_overrides = { models.ManyToManyField: {'widget': forms.SelectMultiple(attrs={'size':'11'})}, } Саме завдяки вбудованому методу formfield_overrides можна модифікувати поля певного типу в адмінці. Звичайно тут криється недолік, а що як нам треба модифікувати лише одне поле. Для реалізації подібної задумки в Джанго потужний функціонал по перевизначенню властивостей поля

Удосконалення Джанго - адмінки: Кольоровий вивід полів об’єктів

Таке завдання: В базі даних знаходяться записи моделі Product. Організувати виведення в адміністративному інтерфейсі поля name кольором #сссссс, якщо поле is_active = False. Варіант рішення: Для зміни html формату виведення поля в Джанго моделі можливо задати метод довільної назви, який і буде відобрадати поле по-новому: class Product(models.Model): name = models.CharField() is_active = models.BooleanField() ...... def colored_name(self): color = "424242" if not self.is_active: color = "cccccc" return " %s " % ( color, self.name) colored_name.allow_tags = True colored_name.admin_order_field = "name" Як бачимо Джанго дозволяє використовувати метод (яка як усе в питоні є об’єктом), як відобрадення поля в адмінці. Пам’ятайте, про те щоб занести поле в list_display, інакше результат буде марний.