Django1.9:没有模型匹配给定的查询

Posted

技术标签:

【中文标题】Django1.9:没有模型匹配给定的查询【英文标题】:Django1.9: No model matches the given query 【发布时间】:2016-12-05 20:50:25 【问题描述】:

我正在按照教程创建博客。 根据教程,代码是正确的。 唯一的区别是我使用 Django 1.9 而不是 1.8

在视图中调用Post模型而不用

publish__year=year,
publish__month=month,
publish__day=day)

不返回 404 错误 - No Post matches the given query.

这是view.py

def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, slug=post,
                                   status='published',)
                                   #publish__year=year,
                                   #publish__month=month,
                                   #publish__day=day)
    return render(request, 'blog/post/detail.html', 'post': post)

模型部分看起来像models.py

class Post(models.Model):
    ...
    publish = models.DateTimeField(default = timezone.now)
    ...

任何想法为什么找不到查询?

编辑:

网址看起来像localhost/blog/2016/07/30/second-post-entry/

def get_absolute_url(self):
        return reverse('blog:post_detail', args=[self.publish.year,
                                                 self.publish.strftime('%m'),
                                                 self.publish.strftime('%d'),
                                                 self.slug])

似乎是这些问题:

self.publish.strftime('%m'), # eg. == 07, but publish__month == 7
self.publish.strftime('%d')  # eg. == 30, publish__day == 30

【问题讨论】:

如果您得到No Post matches the given query,则表示没有与该年、月和日匹配的帖子。我们不知道您的数据库中有哪些帖子,发布日期是什么,或者您尝试访问的网址是什么,因此我们无法告诉您除此之外还有什么问题。 @Alasdair URL 的结构是我在我的数据库中找到的:print(posts[1].publish) 2016-07-30 17:47:28+00:00 好的。 7 != '07' self.publish.strftime('%m') != publish__month ... 那么如何用 0 调用月份呢?现在正确的方法是什么? 尝试转换为整数,例如publish__month=int(month) 【参考方案1】:

据我所知,您可以将 self.publish.strftime('%m')self.publish.strftime('%d') 更改为 self.publish.monthself.publish.day, 您可以将传递的数据转换为 int publish__year=int(year), publish__month=int(month), publish__day=int(day)。这应该可以解决问题。

【讨论】:

@Alasdair @Artem-Kolontay 将month = '07' 转换为int(month) 没有帮助......所以我想知道。我发现问题出在我的setting.py 中的import pytz。这样就解决了问题。但是没有100%理解为什么。所以它与我的数据库时间类型有关吗?有人可以解释或参考吗?

以上是关于Django1.9:没有模型匹配给定的查询的主要内容,如果未能解决你的问题,请参考以下文章

没有用户匹配给定的查询

Django 1.9.5:偶尔出现反向查找字段的 FieldError

Django 1.9 在列表中查找属性等于某个值的对象

使用Django1.10版本时,配置文件要注意的地方

105 - 获取模型列表

AttributeError:'str'对象没有属性'regex'django 1.9