【问题标题】:Why isn't Django returning a datetime field from the database?为什么 Django 不从数据库中返回日期时间字段?
【发布时间】:2010-11-13 22:44:07
【问题描述】:

对于我的第一个 Django 应用程序,我正在尝试编写一个简单的报价收集网站(想想 bash.org),它具有非常简单的功能,只是为了让我的脚湿透。我使用 sqlite 作为我的数据库,因为它是最容易设置的。

这是我现在唯一的模型:

class Quote(models.Model):
    text = models.TextField();
    upvotes = models.IntegerField(default=0)
    downvotes = models.IntegerField(default=0)
    active = models.BooleanField(default=False)
    date_published = models.DateTimeField(auto_now_add=True)

还有一个非常简单的详细模板,只是为了转储信息:

Quote: {{ quote.text }}<br>
Upvotes: {{ quote.upvotes }}<br>
Downvotes: {{ quote.downvotes }}<br>
Published: {{ qoute.date_published|date:"F j, Y, g:i a" }}

当我转到详细信息页面时,给定对象的所有内容都会正确输出,但日期时间(空白)除外。但是,我检查了数据库并确认该对象的列中存储了一个日期时间,并且它显示了很好的管理区域。另外,当我从 manage.py 运行 shell 时,得到的结果如下:

>>> q = Quote.objects.all()[0]
>>> q.date_published
datetime.datetime(2009, 7, 24, 23, 1, 7, 858688)

另外,我使用通用视图 django.views.generic.list_detail.object_detail 来处理请求,但我也尝试使用下面的视图并得到相同的结果。

def detail(Request, id):
    q = get_object_or_404(Quote, pk=id)
    return render_to_response('quotable/quote_detail.html', {'quote': q})

我在尝试显示日期时做错了什么,还是这里发生了其他事情?

谢谢。

【问题讨论】:

  • 可能只是一个转录错字,但您在有问题的行中将“quote”中的“o”和“u”调换了。
  • 是的,始终使用剪贴板 - 输入内容不要超过一次(在限制范围内,cmets 等除外)。

标签: python django datetime sqlite


【解决方案1】:

正如亚当·伯尼尔所说,你拼错了quote

【讨论】:

  • 这是我如此鄙视 django 模板的原因之一。我不想要一个静默失败的系统。我希望它对我做错的每一件事都嗤之以鼻。即使并不总是错的,但它认为它可能是错的,我想知道它,以便我可以进去并在它上面加一些额外的镀层,以便下一个看到它的人可以看到它看起来可能是错的,我已经想到了,评论了为什么我认为它实际上是正确的,并告诉程序同样的。
  • 当我做这样的事情时,它告诉我它失败了...?
  • @Steve Losh:有一个设置可以做到这一点:TEMPLATE_STRING_IF_INVALID
  • piquadrat:但这不会导致错误,只是用一个字符串代替无效变量,不是吗?
  • @uswaretech:你可以让它在失败时抛出异常:djangosnippets.org/snippets/646
【解决方案2】:

我不确定你在用 date: 过滤器做什么 - 如果你用简单的东西替换它会发生什么,例如 date:"D d M Y

【讨论】:

    【解决方案3】:

    我相信 django.views.generic.list_detail.object_detail uses a variable named object_id, not id

        urlpatterns = patterns('',
            (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
            (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
            url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
            (r'^(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
    
    )
    

    当您改为使用详细模板时,您的 url 模式将是错误的。

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 2018-02-01
      • 2015-12-18
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多