Django — один из самых популярных фреймворков Python для создания бэкэндов для веб-приложений. Django работает по принципу шаблона представления модели, любая сущность в Django представлена ​​моделью, которая обычно определяется в файле models.py в любом каталоге приложения.

Давайте посмотрим на некоторые полезные мета-параметры модели, предоставленные нам Django:

заказ №1

Как следует из названия, ordering в мета-параметрах указывает порядок, в котором набор запросов будет заполняться всякий раз, когда Model.objects() вызывается в модели. ordering должен быть кортежем, в который поля модели вставляются в виде строк. `-` перед полем делает его в порядке убывания.`

#models.py
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ('-published',)

Экземпляры обычно возвращаются диспетчером моделей в том порядке, в котором они были вставлены. У нас есть возможность заказа для изменения этого. Экземпляры Post в приведенном выше коде будут отсортированы от последней вставленной модели к первой.

Оболочка Django перед установкой порядка:

>>> from main.models import Post
>>> qs = Post.objects.all()
>>> qs
<QuerySet [<Post: Post object (1)>, <Post: Post object (2)>, <Post: Post object (3)>]>

Оболочка Django после настройки порядка:

>>> from main.models import Post
>>> qs = Post.objects.all()
>>> qs
<QuerySet [<Post: Post object (3)>, <Post: Post object (2)>, <Post: Post object (1)>]>

#2 уникальный_вместе

Параметр unique_together в Django указывает модели разрешить только один экземпляр определенной комбинации значений для заданных полей. Если экземпляр с такими же значениями уже создан, Django выдает ошибку.

Параметры unique_together принимают список списков с именами полей в качестве элементов.

На изображении выше вы можете видеть, что нет ограничений на создание более одного поста с одинаковым заголовком и содержанием.

from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        unique_together = [['title', 'content'],

Когда вы пытаетесь создать публикацию с тем же заголовком и содержанием, которые уже присутствуют после добавления уникальной опции «вместе», возникнет ошибка.

# 3 get_latest_by

Опция get_latest_by в Django указывает модели вернуть последний объект по указанному полю модели. Это используется, когда latest() вызывается из диспетчера моделей. get_latest_by принимает имя поля, которое обычно является DateTimeField или DateField.

#models.py
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ('-published',)
        get_latest_by = 'published'

Django Shell после установки get_latest_by :

>>> from main.models import Post
>>> Post.objects.all().latest()
<Post: Post object (3)>
>>> Post.objects.all().last()
<Post: Post object (1)>

Посмотрите, как порядок и get_latest_by отличаются друг от друга, порядок влияет на набор запросов, но get_latest_by работает только для latest() функции Модели.

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