久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python - Django內(nèi)使用filter過(guò)濾時(shí)間,只認(rèn)年份不認(rèn)月份是怎么回事?

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

問(wèn)題描述

想用Django開(kāi)發(fā)一個(gè)個(gè)人博客,參考了網(wǎng)上的一些文章和Django文檔,目前做到日期歸檔這個(gè)功能,以下是有問(wèn)題的View

class ArchiveView(ListView): template_name = 'blog.html' context_object_name = 'articles' def get_queryset(self): # 接收從url傳遞的year和month參數(shù),轉(zhuǎn)為int類型 year = int(self.kwargs[’year’]) month = int(self.kwargs[’month’]) # 按照year和month過(guò)濾文章 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試了很久,最后發(fā)現(xiàn)問(wèn)題出在這一句:

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

其中add_time__month=month無(wú)法過(guò)濾到正確月份,導(dǎo)致結(jié)果的QuerySet為空;pdb調(diào)試上面這個(gè)View中的month變量和article.add_time.month又確實(shí)是一樣的,理論上應(yīng)該可以得到我想要的文章。注:status=’p’和add_time__year=year都可以成功地找到符合條件的文章;也試過(guò)用Q,結(jié)果是一樣的。不知道問(wèn)題描述清楚了沒(méi)有= =|||,我現(xiàn)在也沒(méi)有頭緒,如果大家也不知道,那么從經(jīng)驗(yàn)上來(lái)說(shuō),這個(gè)問(wèn)題應(yīng)該怎么去找解決辦法……

這是我的ArticleModels,還附帶了自定義的Manager,不知道會(huì)不會(huì)是因?yàn)檫@個(gè)影響到的。

class ArticleAchiveManage(models.Manager): def archive(self):date_list = ArticleModel.manager.dates(’add_time’, ’month’, order=’DESC’)# 獲取到降序排列的精確到月份且已去重的文章發(fā)表時(shí)間列表# 并把列表轉(zhuǎn)為一個(gè)字典,字典的鍵為年份,值為該年份下對(duì)應(yīng)的月份列表date_dict = defaultdict(list)for d in date_list: date_dict[d.year].append(d.month)# 模板不支持defaultdict,因此我們把它轉(zhuǎn)換成一個(gè)二級(jí)列表,由于字典轉(zhuǎn)換后無(wú)序,因此重新降序排序return sorted(date_dict.items(), reverse=True)class ArticleModel(models.Model): STATUS_CHOICES = ( (’d’, ’草稿’), (’p’, ’已發(fā)布’)) category = models.ForeignKey(’CategoryModel’, verbose_name=’分類’, null=True) status = models.CharField(’文章?tīng)顟B(tài)’, default=’d’, max_length=1, choices=STATUS_CHOICES) manager = ArticleAchiveManage() title = models.CharField(max_length=32, verbose_name=u’標(biāo)題’) abstract = models.TextField(max_length=144, verbose_name=’摘要’, default=’’) content = models.TextField(verbose_name=u’內(nèi)容’) add_time = models.DateTimeField(verbose_name=u’發(fā)表時(shí)間’, auto_now_add=True) last_modified_time = models.DateTimeField(’修改時(shí)間’, auto_now=True) read_times = models.PositiveIntegerField(verbose_name=u’閱讀次數(shù)’, default=0) bravo_times = models.PositiveIntegerField(verbose_name=u’點(diǎn)贊’, default=0) class Meta:verbose_name = ’文章’verbose_name_plural = verbose_name def __str__(self):return self.title

問(wèn)題解答

回答1:

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

標(biāo)簽: Python 編程
主站蜘蛛池模板: 兖州市| 松潘县| 黑水县| 宜宾县| 葫芦岛市| 墨竹工卡县| 望江县| 灵寿县| 曲周县| 上蔡县| 南陵县| 北安市| 赞皇县| 偃师市| 上思县| 武陟县| 盐边县| 腾冲县| 罗平县| 南川市| 株洲市| 彰化县| 刚察县| 正阳县| 绿春县| 榆树市| 石城县| 巩留县| 逊克县| 固安县| 海城市| 赣榆县| 舞钢市| 邛崃市| 平远县| 永平县| 大邑县| 英山县| 七台河市| 新蔡县| 苏尼特左旗|