Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Django model writing style

1

Django model writing style

Вопреки django coding style

Оформление моделей в Django. Иногда бывает совсем не понять, что и где находится в моделях. Поэтому не зная о существовании Django coding style я придумал свой велосипед, который с точки зрения Django конечно не правильный, но он помогает мне не запутаться, и я поясняю почему именно так:

  1. все классы начиная с класса Мета (чтобы видеть что за модель по названию)
  2. все поля базы данных (аттрибуты класса)
  3. менеджеры (аттрибуты класса)
  4. переопределение встроенных методов первый метод __init__ последний метод def __str__ (чтобы видеть что возвращается в строку на выходе в конце)
  5. собственные методы
  6. статические функции (аккуратно спрятать все функции относящиеся к модели в класс)

У Django другой порядок:

  1. все поля базы данных (аттрибуты класса)
  2. менеджеры (аттрибуты класса)
  3. все классы начиная с класса Мета (чтобы видеть что за модель по названию)
  4. переопределение встроенных методов первый метод __str__(), save(), get_absolute_url(), причем __str__() должен содержать обратную совместимость с python2
  5. собственные методы
class MyTree(MPTTModel):
    class Meta:
        verbose_name = 'ветка'
        verbose_name_plural = 'дерево'
        order = ['title']
        permissions = (
            ('can_modify_tree_order_index', 'Can modify tree order index'),
        )

    class MPTTMeta:
        order_insertion_by = ['title']

    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
    title = models.CharField('title', max_length=500)

    tree_manager = TreeManager()

    def __init__(self, *args, **kwargs):
        ...
        super(MyTree, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        ...
        super(MyTree, self).save(*args, **kwargs)

    def __str__(self):
        return 'Ветка {title}'.format(title=self.title)

    def custom_method(self):
        ...
        return self

    @staticmethod
    def pre_save(sender, instance, **kwargs):
    pass

pre_save.connect(MyTree.pre_save, sender=MyTree)

Прочитав django code style решил написать свое мнение, ведь уже много лет подряд пишу модели.



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

03.04.2016

Обновление

05.05.2022

Категории

django

Тэги

  • django 12
  • python 30

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor