Django Queryset增加manager

**#定义一个新的过滤规则,这里是过滤状态为发布的帖子**

**class PublishedManager(models.Manager):**
        **def get_queryset(self):**
               **return super(PublishedManager,self).get_queryset().filter(status='published')**


class Post(models.Model):
        STATUS_CHOICES = (
        ('draft','Draft'),('published','Published'),
        )
        title = models.CharField(max_length=250)
        slug = models.SlugField(max_length=250,unique_for_date='publish')
        author = models.ForeignKey(User,related_name='blog_posts')
        body = models.TextField()
        publish = models.DateTimeField(default=timezone.now)
        created = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)
        status = models.CharField(max_length=10,choices=STATUS_CHOICES,default='draft')
        **objects = models.Manager()  #默认manager**
        **published = PublishedManager()  #新添加的manager**

        class Meta:
                ordering = ('publish',)

        def __str__(self):
                return self.title

 

通过python manager.py shell就可以使用新添加manager:

由于在post添加了新的内容,需要重新引入Post

>>>from blog.models import Post

>>>Post.published.all()

这样就可以过滤出所有发布状态的帖子,并且可以使用Queryset相同的方法:

 

转载于:https://www.cnblogs.com/yuruhao/p/7065675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值