为什么Django不返回数据库中的日期时间字段?

2 投票
3 回答
1619 浏览
提问于 2025-04-15 13:09

我正在做我的第一个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})

我在显示日期时是不是做错了什么,还是说这里发生了其他问题?

谢谢。

3 个回答

0

我认为 django.views.generic.list_detail.object_detail 使用的是一个叫做 object_id 的变量,而不是 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 规则会出错。

0

我不太明白你在用那个 date: 过滤器做什么——如果你把它换成简单一点的,比如 date:"D d M Y",会发生什么呢?

2

正如亚当·伯尼尔提到的,你把 quote 拼错了。

撰写回答