Cat

Django 14. Модель пользователя бота

Продолжим добавлять функционал боту и Django. Сегодня сделаем модель для пользователя ботом. Это позволит получать статистику по использованию бота прямо в панели администратора Django.

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Сайт на Django proDream 05 Сентябрь 2023 Просмотров: 678

Создание модели.

Перейдём в файл 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 и убедимся, что модель добавилась в панель администратора.

Автор

    Нет комментариев

    Реклама