热门标签 | 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



   



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
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社区 版权所有