Python Django get_object_或_404在按日期获取时引发异常

Python Django get_object_或_404在按日期获取时引发异常,python,mysql,django,Python,Mysql,Django,我的代码是这样的: def post_detail(request, year, month, day, slug): print(month, type(month)) post = get_object_or_404(Post, slug=slug, status='published',

我的代码是这样的:

def post_detail(request, year, month, day, slug):
      print(month, type(month))
      post = get_object_or_404(Post,
                               slug=slug,
                               status='published',
                               published__year=year
                              )
      print(post.published.month, type(post.published.month))
      return render(request, 'blog/post/detail.html', {'post': post})
调用该视图时的输出:

7
7.

这表明月份是7(int),但是当我修改它时,如下所示:

def post_detail(request, year, month, day, slug):
      print(month, type(month))
      post = get_object_or_404(Post,## Heading ##
                               slug=slug,
                               status='published',
                               published__year=year,
                               published__month=month
                              )
      print(post.published.month, type(post.published.month))
      return render(request, 'blog/post/detail.html', {'post': post})
我现在从
get\u object\u或\u 404
获取404。奇怪的是,我在本地机器上有相同的代码,而且它可以工作。那个在服务器上

我的模型是:

class PublishedManager(models.Manager):

def get_queryset(self):
    return super().get_queryset().filter(status='published')


class Post(models.Model):

    STATUS_CHOICES = (
        ('draft', 'Roboczy'),
        ('published', 'Opublikowany'),
    )       

    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='published')                           
    author = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)                              

    body = models.TextField()
    published = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    objects = models.Manager()
    active = PublishedManager()

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

    class Meta:
        ordering = ('-published',)

    def __str__(self):
        return f'{self.title} by {self.author.username.title()}'
我做了
makemigrations
migrate
,有人知道这里会发生什么吗

编辑:

我进行了非常相似的筛选查询,原始sql查询如下:

选择'blog\u post`.'id`、'blog\u post`.'title`、'blog\u post`.'slug`、'blog\u post`.'author\u id`、'blog\u post`.'body`、'blog\u post`.'published`、'blog\u post`.'created`、'blog\u post`.'updated`.'status`.'FROM\blog\u post`.'WHERE(摘录(转换日('blog\u post`.'published`.'UTC','UTC','Europe/Warsaw'))和摘录(转换月)=23)(`blog_post`.`published`、`UTC`、`Europe/Warsaw'))=7和`blog_post`.`published`于2017-12-31 23:00:00至2018-12-31 22:59:59.999999和`blog_post`.`slug`=grgregthyrj)由`blog_post`.`published`DESC`发布的命令。

当我在数据库上执行时,它给了我错误的语法https://www.piliapp.com/mysql-syntax-check/在上面。它也给了我错误的语法。
您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,了解在'23:00:00和2018-12-31 22:59:59.99999附近使用的正确语法和
blog_post
slug
=grgregthyrj)或“在第1行

然后我从中间移开,就像:

选择'blog\u post`.`id`、'blog\u post`.`title`、'blog\u post`.`slug`、'blog\u post`.`author\u id`、'blog\u post`.`body`、'blog\u post`.`published`、'blog\u post`.`created`、'blog\u post`.`updated`、'blog\u post`.`status`.`FROM'blog\u post`.`WHERE(摘录(从转换日期开始('blog\u-TZ('blog\u-post`.`published`、'UTC欧洲/华沙'))=23和摘录)(从CONVERT_TZ(`blog_post`.`published`、`UTC'、`Europe/Warsaw')起的一个月)和`blog_post`.`slug`=grgregthyrj)通过`blog_post`.`published`DESC;


根据该工具,它是正确的。也许这就是问题所在?

您确定您要查询的对象(月=7)确实存在吗?当我执行时
post=get\u object\u或\u 404(Post,slug=slug,status='published',published_uuyear=year)
,然后
Post.published.month
给了我7,所以它就存在了。我也在前端看到了那篇文章,当我按
Post.objects.all()列出所有文章时
就是这样,引发了什么异常?
没有与给定查询匹配的Post。
您可能需要检查生产时区与本地时区的差异,尤其是在一个月的第一天/最后一天,不是吗?