国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

python - Django內使用filter過濾時間,只認年份不認月份是怎么回事?

瀏覽:104日期:2022-07-30 18:02:00

問題描述

想用Django開發一個個人博客,參考了網上的一些文章和Django文檔,目前做到日期歸檔這個功能,以下是有問題的View

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試了很久,最后發現問題出在這一句:

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

其中add_time__month=month無法過濾到正確月份,導致結果的QuerySet為空;pdb調試上面這個View中的month變量和article.add_time.month又確實是一樣的,理論上應該可以得到我想要的文章。注:status=’p’和add_time__year=year都可以成功地找到符合條件的文章;也試過用Q,結果是一樣的。不知道問題描述清楚了沒有= =|||,我現在也沒有頭緒,如果大家也不知道,那么從經驗上來說,這個問題應該怎么去找解決辦法……

這是我的ArticleModels,還附帶了自定義的Manager,不知道會不會是因為這個影響到的。

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

問題解答

回答1:

# 可以使用如下方式進行篩選,篩選的值格式和你DB中的格式對應,比如是2017/04/12還是2017-04-12article_list = ArticleModel.objects.filter(status=’p’, add_time__startswith=’2017-04-12’).order_by(’-add_time’)#如果只想根據年月來篩選就是article_list = ArticleModel.objects.filter(status=’p’, add_time__startswith=’2017-04’).order_by(’-add_time’)

標簽: Python 編程
主站蜘蛛池模板: 国产真实乱系列2孕妇 | 日产一区2区三区有限公司 日产一区两区三区 | 亚洲国产福利精品一区二区 | 九九视频在线观看视频6 | 一本色道久久爱88av | 在线亚洲欧美日韩 | 欧美性猛交xxxxx按摩国内 | 九九色网站 | 国产乱码精品一区二区三区中 | 一 级做人爱全视频在线看 一本不卡 | 亚洲 欧美 激情 另类 自拍 | www.成人在线视频 | 奇米888四色在线精品 | 免费区一级欧美毛片 | 国产精品_国产精品_国产精品 | 日韩一级片免费看 | 亚洲成a人不卡在线观看 | 国产人做人爱免费视频 | 国产午夜亚洲精品一区网站 | 国产成人精品免费视频大全五级 | 久久综合久美利坚合众国 | 国产毛片久久精品 | 亚洲加勒比在线 | 美女张开双腿让男人桶视频免费 | 久久草在线视频播放 | 久草福利资源在线观看 | 久久免费视频网站 | 狠狠色丁香婷婷综合小时婷婷 | 欧美午夜a级精美理论片 | 性精品 | 国产一区精品在线 | 国产一级毛片免 | 欧美日韩一区二区三区在线播放 | 久久综合88| 成年人在线观看网站 | 国产91精品露脸国语对白 | 国产精品视频永久免费播放 | 国产精品久久国产精品99 | 欧美一级片在线视频 | 日韩一区二区在线免费观看 | 久久怡红院|