2014-07-25 18 views
0

在一个Django应用程序中,我试图在一个页面上显示模型的信息,但是当试图使用DateTimeField来显示创建日期时,它返回一个服务器错误。这里是我的代码:在我的视图方法中,我无法使用模型的DateTimeField?

型号

class User(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(unique=True, max_length=128) 
    created_date = models.DateTimeField() 
    class Meta: 
     managed = False 
     db_table = 'user' 
    def __unicode__(self): 
     return self.name 

查看,直到我尝试使用created_date,无论是在type()或将其添加到字符串

def user_detail(request, pk): 
    user = User.objects.get(id=pk) 

    # Debugging 
    print user.name # Works fine, prints "ZAD-Man" 
    print user.created_date # Works fine, prints "2014-07-21 00:00:00" 
    print type(user.created_date) # Breaks with a 500 Server Error 

    html = "<dt>Name</dt><dd>" + user.name + "</dd><dt>Date Added</dt><dd>" + user.created_date + "</dd>" # Breaks (when the debug lines are removed so that it reaches here) 
    return HttpResponse(html) 

,一切工作正常。我做错了什么,我该如何解决?

编辑:下面是具体的错误:

当它打破了上type(user.created_date),我得到:

TypeError: 'unicode' object is not callable 

当它打破了上...+ user.created_date +...我得到(如果我删除调试线,发生):

TypeError: coercing to Unicode: need string or buffer, datetime.datetime found 
+0

你是什么意思的“休息”?你看到什么错误? – karthikr

+0

这是Django日志和Chrome控制台中的500服务器错误。 –

+0

在网络选项卡中,当您单击带有错误的条目时,可以看到该错误。 – karthikr

回答

1

关注点分离是什么的东西Django philosophy是一个关于。您可以在视图具有HTML代码应提取到的模板,并在视图与传递user对象的背景下呈现:

mytemplate.html

<dt>Name</dt> 
<dd>{{ user.name }}</dd> 
<dt>Date Added</dt> 
<dd>{{ user.created_date }}</dd> 

views.py

from django.template.response import TemplateResponse 

def user_detail(request, pk): 
    user = User.objects.get(id=pk) 
    return TemplateResponse(request, 'mytemplate.html', {'user': user}) 

而且,考虑切换到Class-based views而不是基于功能的视图。具体来说,你有很多类似于DetailView的视图。

+0

不幸的是,我必须保持这种方式,因为它被AJAX调用用来换出HTML。否则,我肯定会更多地沿着这些路线。 –

+0

@ ZAD-Man您仍然可以使用模板并进行渲染。 – alecxe

+0

哦...我想我明白了。当我说'return render(request,“foo.html”)'时,它只是返回HTML,我可以给我的AJAX,就像我在这里做的一样?是对的吗? –

2

你能尝试做

html = "<dt>Name</dt><dd> {} </dd><dt>Date Added</dt><dd> {} </dd>".format(user.name, user.created_date) 

您还可以调用日期时间值的str(),并保留html元素+格式。

编辑

我不确定为什么类型不适合你。你可以发布如何将时间保存到模型的代码?我做了一个Django模型的测试运行设定为这样一个领域:

date = models.DateField(auto_now=True, auto_now_add=True) 

我测试你的问题出在外壳

>>> print t.date 
2014-06-23 
>>> print type(t.date) 
<type 'datetime.date'> 
>>> print type(t.time) 
<type 'datetime.time'> 
+0

两种方式都适合我,谢谢。我会继续接受,直到我看到有更多解释的东西(特别是为什么'type()'不起作用),但是感谢你帮助我继续解决问题。 :) –

+0

我给我的帖子增加了一些解释。 –

+0

我使用一个简单的'CreateView'来添加它。我只输入日期,所以默认为00:00:00。 –

相关问题