-
Придерживаемся black style
-
При создание файлов придерживаться нижнего подчеркивания:
так плохо:
performancemediareview.py
так хорошо:
performance_media_review.py
-
f-строки предпочтительнее функции или выражений форматирования:
Т.е. так плохоdef __str__(self): return "{} {}".format(self.name, self.type)
Так хорошо
def __str__(self): return f"{self.name} - {self.type}"
-
По возможности используем кортежи вместо списков. Кортеж - неизменяемый объект. Вот тут про различия Т.е. так не нужно
filterset_fields = ["year"]
Лучше так
filterset_fields = ("year",)
- Если хотя бы одно одно описание поля не помещается на одну строку, то для всех атрибутов полей используйте выделенную строку.
T.e так плохоТак хорошоfirst_field = models.ForeignKey(Person, on_delete=models.PROTECT) second_field = models.CharField( max_length=200, unique=True, )
first_field = models.ForeignKey( Person, on_delete=models.PROTECT, ) second_field = models.CharField( max_length=200, unique=True, )
- У модели всегда должен присутствовать метод
__str__
- У каждой модели должно быть
verbose_name
иverbose_name_plural
- Если модель сортируемая и у нее есть поле, отвечающее за сортировку, такое поле должно иметь имя
order
иverbose_name
-Порядок
- Для регистрации моделей в админке используем декоратор (документация)
T.e так плохоТак хорошоfrom django.contrib import admin from .models import Author class AuthorAdmin(admin.ModelAdmin): pass admin.site.register(Author, AuthorAdmin)
from django.contrib import admin from .models import Author @admin.register(Author) class AuthorAdmin(admin.ModelAdmin): pass
- При добавлении вычисляемых полей используем декоратор (документация)
T.e так плохоТак хорошоdef countable_field(self, obj): return True countable_field.short_description = "Поле"
@admin.display( boolean=True, ordering='-publish_date', description='Поле', ) def countable_field(self, obj): return True
- Для получения глобальных настроек из settings к полям обращаемся через сам settings
T.e так плохоТак хорошоfrom config.settings.base import MAILJET_TEMPLATE_ID_PLAY message.template_id = MAILJET_TEMPLATE_ID_QUESTION
from django.conf import settings message.template_id = settings.MAILJET_TEMPLATE_ID_QUESTION
- При добавлении, изменении или удалении данных через миграцию, её имя должно начинаться с
data
, а общее название должно быть такого вида "00XX_data_..." T.e так плохоТак хорошо"migrations/0016_additional_email_settings.py"
"migrations/0016_data_additional_email_settings.py"