Django定制模型管理器

objects是检索数据库中所有对象的每个模型的默认管理器。然而,也可以为我们的模型定义自定义管理器。

比如创建一个自定义管理器来检索具有发布状态的所有帖子。关于blog的模型,可以参考

Django数据模型代码片段-CSDN博客

📌使用Post.published.all()替代Post.objects.filter(publish='published')

编辑models.py

python 复制代码
class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager,self).get_queryset().filter(status='published')

class Post(models.Model):

    ...

    objects = models.Manager()
    published = PublishedManager()

    ...

管理器的get_queryset()方法返回将要执行的QuerySet。重写此方法,以便在最终的QuerySet中包含自定义过滤器。

下面用通用视图创建blog列表。关于通用视图,更多内容请看

Django通用视图-CSDN博客

编辑views.py

python 复制代码
...
from django.views.generic import ListView
from .models import Post

class PostListView(ListView):
    queryset = Post.published.all()
    context_object_name = "posts"
    paginate_by = 3
    template_name = "blog/post/list.html"

添加URL路径

python 复制代码
from django.urls import path
from . import views

app_name = "blog"
urlpatterns = [
    path("", views.PostListView.as_view(), name="post_list"),
]
相关推荐
风逸hhh7 分钟前
python打卡day25@浙大疏锦行
开发语言·python
魔尔助理顾问1 小时前
Flask如何读取配置信息
python·flask·bootstrap
jc_hook2 小时前
Python 接入DeepSeek
python·大模型·deepseek
IsPrisoner2 小时前
Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
开发语言·后端·golang
chicpopoo2 小时前
Python打卡DAY25
开发语言·python
crazyme_63 小时前
深入掌握 Python 切片操作:解锁数据处理的高效密码
开发语言·python
tan180°4 小时前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理
有梦想的攻城狮4 小时前
spring中的@MapperScan注解详解
java·后端·spring·mapperscan
Code_流苏4 小时前
《Python星球日记》 第69天:生成式模型(GPT 系列)
python·gpt·深度学习·机器学习·自然语言处理·transformer·生成式模型