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 адреса. Если таковых нет, это значит только одно - что этим сайтом никто не …

VisualSEOStudio
Бесплатная программа для создания карты сайта
Автор: Алексей Черемных30 ноября 2020

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

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

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

Прогон по каталогам
Есть ли эффект от прогонов по каталогам?
Автор: Алексей Черемных28 ноября 2020

Уже давно разного рода сео специалисты спорят о пользе от прогона по каталогам. Под прогоном имеется в виду рассылка объявлений, …

CleanTalk
Лучшая система для фильтрации спама на сайте
Автор: Алексей Черемных30 ноября 2020

Сегодня Вам прорекламирую безусловно лучшую в рунете систему фильтрации спама для сайтов CleanTalk!

С данным сервисов работаю с 2018 года, …

Все теги:

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