Не делайте этого в шаблоне, вы можете изменить queryset
из ListView
(хорошо на основе object_list
Я предполагаю, что вы используете ListView
или хотя бы связанный класс):
class MyPostView(ListView):
model = PostModel
<b>queryset = PostModel.objects.filter(post_highlighted=True)</b>
# ...
Теперь object_list
будет содержать только PostModel
объектов с post_highlighted = True
.
Если вы используете другой вид, где вы сами создаете object_list
, вы можете написать его следующим образом:
object_list = PostModel.objects.filter(post_highlighted=True)
так что, пока object_list
содержит подсвеченные PostModel
объекты, у нас все хорошо.
Преимущество выполнения этого на уровне queryset
состоит в том, что мы запросим в базе данных на выделенные PostModel
объекты. Таким образом мы выполняем запрос:
SELECT postmodel.*
FROM postmodel
<b>WHERE post_highlighted = TRUE</b>
Базы данных, как правило, могут эффективно искать такие записи, и, кроме того, мы избегаем фильтрации на уровне Django / Python, который обычно на несколько медленнее.
Представьте, если выделены два сообщения из ста. Затем, не фильтруя на уровне базы данных, вы передаете данные всех сотен постов в Django, выполняете десериализацию, зацикливаетесь на них и почти мгновенно отбрасываете 98 невыделенных. Это много работы даром.
Примечание : обычно модели не имеют суффикса Model
. Советую переименовать модель в Post
.