热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django内使用filter过滤时间,只认年份不认月份是怎么回事?

想用Django开发一个个人博客,参考了网上的一些文章和Django文档,目前做到日期归档这个功能,以下是有问题的View

想用Django开发一个个人博客,参考了网上的一些文章和Django文档,目前做到日期归档这个功能,以下是有问题的View



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class ArchiveView(ListView):

   template_name = "blog.html"

   context_object_name = "articles"

 

   def get_queryset(self):

       # 接收从url传递的year和month参数,转为int类型

       year = int(self.kwargs['year'])

       mOnth= int(self.kwargs['month'])

       # 按照year和month过滤文章

       article_list = ArticleModel.manager.filter(status='p', add_time__year=year, add_time__mOnth=month).order_by('-add_time')

 

       for article in article_list:

           pdb.set_trace()

           article.cOntent= markdown2.markdown(article.content, extras=['fenced-code-blocks'], )

       return article_list

 

   def get_context_data(self, **kwargs):

       return super(ArchiveView, self).get_context_data(**kwargs)

用pdb试了很久,最后发现问题出在这一句:

1
article_list = ArticleModel.manager.filter(status='p', add_time__year=year, add_time__mOnth=month).order_by('-add_time')

其中




1
add_time__mOnth=month

无法过滤到正确月份,导致结果的QuerySet为空;pdb调试上面这个View中的

1
month

变量和

1
article.add_time.month

又确实是一样的,理论上应该可以得到我想要的文章。
注:

1
status='p'

1
add_time__year=year

都可以成功地找到符合条件的文章;也试过用Q,结果是一样的。
不知道问题描述清楚了没有= =|||,我现在也没有头绪,如果大家也不知道,那么从经验上来说,这个问题应该怎么去找解决办法……


这是我的ArticleModels,还附带了自定义的Manager,不知道会不会是因为这个影响到的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class ArticleAchiveManage(models.Manager):

    def archive(self):

        date_list = ArticleModel.manager.dates('add_time', 'month', order='DESC')

        # 获取到降序排列的精确到月份且已去重的文章发表时间列表

        # 并把列表转为一个字典,字典的键为年份,值为该年份下对应的月份列表

        date_dict = defaultdict(list)

        for d in date_list:

            date_dict[d.year].append(d.month)

        # 模板不支持defaultdict,因此我们把它转换成一个二级列表,由于字典转换后无序,因此重新降序排序

        return sorted(date_dict.items(), reverse=True)





class ArticleModel(models.Model):

    STATUS_CHOICES = (

            ('d', '草稿'),

            ('p', '已发布')

        )

    category = models.ForeignKey('CategoryModel', verbose_name='分类', null=True)

    status = models.CharField('文章状态', default='d', max_length=1, choices=STATUS_CHOICES)

    manager = ArticleAchiveManage()

    title = models.CharField(max_length=32, verbose_name=u'标题')

    abstract = models.TextField(max_length=144, verbose_name='摘要', default='')

    cOntent= models.TextField(verbose_name=u'内容')

    add_time = models.DateTimeField(verbose_name=u'发表时间', auto_now_add=True)

    last_modified_time = models.DateTimeField('修改时间', auto_now=True)

    read_times = models.PositiveIntegerField(verbose_name=u'阅读次数', default=0)

    bravo_times = models.PositiveIntegerField(verbose_name=u'点赞', default=0)



    class Meta:

        verbose_name = '文章'

        verbose_name_plural = verbose_name



    def __str__(self):

        return self.title



   



推荐阅读
  • Django 使用slug field时遇到的问题 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 使用lambda表达式排序Collections.sort(temp,(Stringa,Stringb)-{returnb.compareTo(a);});Collections ... [详细]
author-avatar
超级活死人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有