Django 14. Модель пользователя бота
Продолжим добавлять функционал боту и Django. Сегодня сделаем модель для пользователя ботом. Это позволит получать статистику по использованию бота прямо в панели администратора Django.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 347837
Реклама
Создание модели.
Перейдём в файл models.py
в директории приложения и по аналогии с предыдущей моделью, создадим новый класс BotUserModel
.
И создадим несколько полей:
class BotUserModel(models.Model):
chat_id = models.BigIntegerField(primary_key=True)
first_name = models.CharField(max_length=50,
verbose_name='Имя')
last_name = models.CharField(max_length=50,
blank=True,
null=True,
verbose_name='Фамилия')
username = models.CharField(max_length=50,
blank=True,
null=True)
created = models.DateTimeField(auto_now_add=True,
verbose_name='Зарегистрирован')
updated = models.DateTimeField(auto_now=True,
verbose_name='Последняя активность')
Разберём, что тут новое:
- В поле
chat_id
, указали, что это поле является Первичным ключом. То есть, это поле уникально. И использовали поле типаBigIntegerField
, поскольку значенияTelegram-ID
выходят за границы базовогоIntegerField
. - В полях
last_name
иusername
добавили два параметра.blank
означает, что поле может быть пустым, аnull
означает, что оно может иметь значениеNULL
. Это обусловлено тем, что имя у пользователя Telegram обязательно к заполнению, а вот фамилия или имя пользователя - нет. - В поле
created
мы присваиваем текущую, локальную дату(дату сервера). При последующем обновлении модели, это поле не будет изменяться, если конечно его не изменить намерено. - Поле
updated
напротив, будет при каждом обновлении модели принимать значение текущего времени.
Дополнения к модели.
Добавим базового менеджера, Мета-класс и dunder-метод __str__
:
objects = models.Manager()
class Meta:
ordering = ['-updated']
verbose_name = 'Пользователь бота'
verbose_name_plural = 'Пользователи бота'
def __str__(self):
return self.first_name
В переменную objects
мы поместили экземпляр класса Manager
.
Менеджеры, это удобный способ взаимодействия с объектами в базе данных. С помощью них получаем данные, фильтруем, создаём. В будущем мы переопределим своих менеджеров, но пока достаточно базового.
Из нового в классе Meta
только пункт ordering
определяющий порядок сортировки записей в базе данных. Для удобства сортировка будет по параметру updated
. Обратите внимание на "-", он означает что сортировка будет в обратном порядке, то есть по убыванию, от самых новых к старым.
Регистрация модели.
Перейдём в файл admin.py
и зарегистрируем модель в панели администратора:
@admin.register(models.BotUserModel)
class BotUserAdmin(admin.ModelAdmin):
list_display = ('chat_id', 'first_name', 'last_name', 'username', 'created', 'updated')
search_fields = ['chat_id', 'first_name', 'username', ]
Обратите внимание! Если вы регистрировали модель не через декоратор, а через admin.site.register, то код находящийся выше, надо добавлять до строки с регистрацией!
Здесь я указал, что бы отображались все поля модели. Включил поиск по полям chat_id
, first_name
и username
.
Теперь надо применить миграции:
python manage.py makemigrations
python manage.py migrate
Запустим Django python manage.py runserver
и убедимся, что модель добавилась в панель администратора.
Все статьи