Автоматический перевод в верхний регистр в CharField Django
8 июня 2016 г. 7:21
Простой и, возможно, нестандартный способ перевода значения поля CharField в верхний регистр без использования javascript. Суть в следующем: в модели переопределяем метод save(), преобразовывая значение нашего поля в верхний регистр, и добавления стиля полю text-transform: uppercase. Таким образом, мы всегда будем видеть, что введённые буквы заглавные, а переопределение даст нам возможность сохранить символы в верхнем регистре, которые мы можем использовать в шаблоне без повторного преобразования text-transform: uppercase.
А теперь наглядный пример. Допустим, у нас есть одежда, и её размер (M, S, L ...) должен записываться в верхнем регистре как мы привыкли видеть на лейблах одежды.
# models.py class Product(models.Model): ... class Size(models.Model): product = models.ForeignKey(Product, verbose_name='Товар', related_name='sizes') value = models.CharField('Размер', max_length=5) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): self.value = self.value.upper() # Переводим значение в верхний регистр return super(Size, self).save(force_insert, force_update, using, update_fields)
from my_app.models import Size from my_app.forms import SizeForm # admin.py class SizeInline(admin.TabularInline): model = Size extra = 0 form = SizeForm @admin.register(Product) class ProductAdmin(admin.ModelAdmin): inlines = (SizeInline, )
from my_app.models import Size # forms.py class SizeForm(forms.ModelForm): class Meta: model = Size exclude = () widgets = { 'value': forms.TextInput(attrs={'style': 'text-transform: uppercase'}), }
Данное решение избавляет нас от подключения js и css кода.
На самом деле есть много вариантов реализации данной задачи. Например, можно было, вообще, обойтись без переопределения save() и использования SizeForm - просто в шаблоне также использовать свойство text-transform: uppercase. Мне так не понравилось, потому что нужно было бы каждый раз при рендере страницы браузеру переводить надписи размеров в верхний регистр. Хоть это не затратная по ресурсам операция, но всё же.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0