Курс «Администрирование ViPNet-сетей»

Django автоматическое заполнение поля в модели при её создании

Категория: Разработка Теги: Веб-разработка Опубликовано: 10 января 2021 г. 22:44
Форма заявки (пример)
Форма заявки (пример)

Появилась необходимость заполнить поле с номером заявки до формирования формы, связанной с моделью, но как это сделать? В интернете много способов, и нет ни одного рабочего! Я догадался сам, сейчас расскажу вам, как это сделать при помощи отдельной функции.

Для начала уточню, что присвоить номер необходимо не просто до формирования формы, а даже до сохранения объекта модели. 

Как сделать уникальный номер заявки, если нет доступа к id/pk? Ведь форма еще не сформирована, и, соответственно, объект будет сохранен только после нажатия кнопки "добавить в форме". До этого момента id/pk недоступен. Говорят, есть функция uuid, но в обнаруженных ответах примеров не было, и я всё-таки допилил свой способ.

При объявлении поля модели можно задать параметр default и в нем указать функцию:

number = models.CharField(max_length=20, unique=True, default=func, verbose_name='Номер заявки')

CharField мне в конкретном случае более удобен, а так можно использовать IntegerField.

verbose_name указывает имя, которое используется в качестве названия в админке и в названии поля в сформированной форме.

unique указывает, должно ли значение данного поля быть уникальным.

max_length - максимальная длина.

default - значение по умолчанию.

Так вот, в параметре default можно указать функцию для вычисления номера для новой заявки.

Функцию необходимо объявить до объявления класса модели и использовать в ней return, и да, никаких параметров self. Вот пример:

def func():
    nm = Req.objects.all()
    nm1 = 1
    for i1 in nm:
        if i1.id > nm1:
            nm1 = i1.id
    nm1 = nm1 + 1
    nn = '000' + str(nm1)
    return nn

Способ до гениальности простой, можно без труда переделать под себя.

Похожие материалы:


Код функции-контроллера с декоратором
Разрешить только определенные HTTP запросы при помощи require_http_methods в Django
Автор: Алексей Черемных3 января 2021

В Django существует довольно простой способ разрешить только определенные типы HTTP запросов при помощи декоратора представлений require_http_methods.

Для этого необходимо во …

Код функции
Простой способ в Django блокировать конкретные IP на всем сайте
Автор: Алексей Черемных3 января 2021

На любом сайте приходится блокировать определенные IP адреса. Если таковых нет, это значит только одно - что этим сайтом никто не …

Установка и настройка easy-thumbnail в Django
Миниатюры в Django при помощи easy-thumbnail
Автор: Алексей Черемных19 июня 2022

Сегодня я расскажу как установить и настроить в Django библиотеку для создания миниатюр easy-thumbnail, которая поможет сжать динамические картинки на веб-странице. …

Код
Способ передать варианты выбора choices в forms.ChoiceField из views.py
Автор: Алексей Черемных21 июня 2021

Недавно сам столкнулся с проблемой передачи вариантов выбора для поля формы с типом виджета Radio и типом формы forms.ChoiceField из views.py. Зачем, …

XmlSitemapGenerator - софт для генерации sitemap.xml без ограничений по урлам
Бесплатная программа для создания карты сайта
Автор: Алексей Черемных30 ноября 2020

Сегодня не так много бесплатных программ для создания карты сайта. Пара штук, и те работают как не очень. О переводе …

Дубли страниц с GET-параметрами
Найдены страницы-дубли с GET-параметрами
Автор: Алексей Черемных6 января 2022

Недавно я столкнулся в панели Яндекс.Вебмастер с критической ошибкой "Найдены страницы-дубли с GET-параметрами" и начал читать инструкции от других специалистов …

Все теги:

Подписка на рассылку свежих статей