Типичные улучшения

Для поиска по тегу начните название тега с символа '@'.

Улучшения, показаны 50 из 102.

Почините настройку DEBUG

Любое непустое значение в переменной окружения включает отладочный режим, даже если это `DEBUG=FALSE`.

Удалите лишние all()

Метод `all()` нужен для того, чтобы запросить у менеджера объектов `Book.objects` первый объект запроса — …

Спрячьте SECRET_KEY

В файле settings.py есть настройка `SECRET_KEY` — это секретный ключ, с помощью которого шифруют пароли …

Вынесите настройку DEBUG

В файле settings.py есть настройка `DEBUG`, она включает отладочный режим работы сайта. На локальной машине …

Разрешите полям оставаться пустыми

Менеджерам будет сложно наполнять БД, если все поля являются обязательными для заполнения. Часто всех нужных …

Запретите каскадное удаление

У поля `ForeignKey` в модели данных есть обязательный атрибут `on_delete`, он задает правило удаления записей …

Запретите null в строковых полях БД

Если в CharField разрешить хранить `None`, то в каждом запросе к базе придется указывать сразу …

Добавьте файлы миграций БД

Если обновление в коде требует изменений структуры БД, а файлов с миграциями в репозитории не …

Сократите количество запросов к БД

Запросы к базе данных — одна из самых медленных операций в работе сайта. Если откинуть …

Воспользуйтесь методом QuerySet.get

Поиск записи в базе данных по ключу, например, по `id` или `slug`, требуется настолько часто, …

Сделайте миграцию идемпотентной

Использование метода `create` в коде дата-миграции часто мешает запустить её повторно — каждый запуск создает …

Укажите русскоязычный verbose_name

Атрибут `verbose_name` задает те названия, что получат поля модели данных при отображении в админке. Русскоязычный …

Укажите related_name

Писать запросы к БД будет проще, если обратные связи сразу получат говорящие названия — `related_name`. …

Используйте related_name

Django не зря предлагает использовать в запросах `related_name`, с ними код получается куда проще и …

Укажите related_name во множественном числе

Если `related_name` указан в единственном числе, то запросы с его участием выглядят очень странно. Проблема …

Замените поля CharField / TextField

В базе данных `CharField` и `TextField` представлены по-разному. `CharField` — это поле фиксированного размера, в …

Добавьте DB к названию переменной окружения

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

Почините сломанную миграцию

Миграция выглядит сломанной. Такое случается, если не протестировать её после изменений в коде. И это …

Обработайте MultipleObjectsReturned

При вызове метода `QuerySet.get` помимо исключения `DoesNotExist` возможна еще одна ситуация — вместо одной записи …

Используйте QuerySet.first()

В Django ORM есть много полезных методов. Один из них — это `first`. Он позволяет …

Явно укажите способ сортировки

Если в запросе не указан способ сортировки, то, значит, он не важен. База данных сделает …

Обработайте DoesNotExist

При вызове метода `QuerySet.get(…)` может так случиться, что искомой записи в базе не будет, и …

Добавьте блок в базовый шаблон

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

Переместите файл в статику

Все картинки на сайте делятся на две группы: статику и медиа. Первые намертво пришиты к …

Уточните критерий поиска

Если бы автоинспеция искала машины по ФИО водителя, штрафы бы постоянно приходили не тем людям. …

Уточните о каком пользователе речь

Ничто не встречается в моделях данных так же часто, как ссылка на юзера через `ForeignKey` …

Изолируйте миграцию от остального кода

В миграциях Django ни в коем случае нельзя использовать код из models.py и прочих файлов …

Положите статику в репозиторий

В репозитории не хватает файлов статики. Без них сайт в браузере отображается некорректно.

Используйте стандартное поле id / pk

К списку полей каждой модели данных Django автоматически добавляет поле `id`. Оно есть у всех …

Протестируйте related_name

Запросы с использованием такого `related_name` выглядят супер-странно.

Посчитайте количество записей на стороне БД

В Django количество записей внутри `QuerySet` можно посчитать с помощью самой обычной функции `len(…)`. Выглядит …

Оптимизируйте запрос ORM

Код вытягивает из базы данных слишком много данных, столько просто не нужно. Чем больше выборка, …

Отделите STATIC_ROOT от STATICFILES_DIRS

Пока мы занимаемся отладкой django берёт на себя функции веб-сервера и веб-приложения. Обычно эти роли …

Спрячьте пустой default в текстовых полях

Обычно Django кладёт `None` во все незаполненные поля модели данных. Пустой `IntegerField` — это `None`, …

Используйте format_html для подстановки в HTML

Функция `format_html` в Django похожа по своим возможностям на обычное форматирование строк. Она тоже подставляет …

Подготовьте код Django к изменению URL схемы

URL схема сайта иногда всё-таки меняется. Если сейчас по коду раскиданы фрагменты адресов `'/post/'` и …

Уберите из админки огромные select-поля

Для полей `ForeignKey` Django в админке использует виджет ``. Он предлагает пользователю выбрать из одну …

Почините конфликт Vue.js и Django

Пропала текстовка, что располагась между первой картинкой и галереей снизу. ![Скриншот](https://i.imgur.com/eGvUkms.png) Проблема в конфликте между …

Почините Add another для картинок

![](https://dvmn.org/filer/canonical/1600270419/713/) [Ссылка на скриншот](https://dvmn.org/filer/canonical/1600270419/713/) Там, где загружена картинка, слева показано название загруженного файла, а справа …

Используйте шорткат render

Вместо нескольких строчек с загрузкой шаблона и его обработкой: ```python def show_phones(request): template = loader.get_template('product_page.html') …

Используйте JSONResponse

Проблема отправки JSON по API не новая, и вместо использования `json.dumps()` уже давно используют другой …

Используйте verbatim на весь тег

Вы используете `{% verbatim %}`, но он захватывает какую-то рандомную область в шаблоне. Получается, что …

Настройте метод *_or_create

Оба метода и `get_or_create`, и `update_or_create` ищут записи в БД с точным совпадением по всем …

Не меняйте стандартные методы Model.save, delete, create

В документации Django и других статьях авторы часто советуют поместить код прямо внутрь метода `save` …

Избавьтесь от дублирования данных в БД

В БД не должно быть избыточности данных. **Избыточность** -- это когда одни данные можно получить …

Не доверяйте FloatField точные вычисления

FloatField хранит данные как питоновский `float` и наследует все его проблемы. Например, вычисления с `float` …

Проверьте адрес перед редиректом

С параметром `next` есть известная уязвимость: если не проверять куда вы делаете редирект, то ваш …

Почините ALLOWED_HOSTS

В чём тогда смысл настройки, если в ней лежат домены, которые вам не принадлежат? Она …

Упорядочьте атрибуты модели данных

В моделях данных Django есть стандартная последовательность записи: сначала поля, потом менеджер объектов, `class Meta` …

Используйте PhoneNumberField

Номер телефона — это самый простой способ найти клиента на сайте. Но если номер телефона …