我正在开展我的第一个django项目,我遇到了问题,显示了类别'从我的数据库到列表的网页。我收到错误"对象没有属性'名称'。到目前为止我的代码是:
型号:
class Category(models.model):
name = models.Charfield(max_length=128)
def __unicode__(self):
return self.Name + ": " +str(self.id)
查看:
from django.shortcuts import render_to_response, redirect
from forms.models import Form, Group, Flow, Gate, Field, Event, Category
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
def homepage (request):
CatName = Category.objects.order_by('id')
output = {
'category_name': CatName.Name,
}
return render_to_response('forms/formsummary.html', output)
HTML:
<div>{{ category_name }}</div>
有人能指出我正确的方向吗?
答案 0 :(得分:2)
在Django中,当您使用ORM查询对象时,有两种可能性(不包括每种情况都不返回):
在这种情况下,您的查询返回了 Category 对象的集合,您可以对此做一些事情,您可以使用列表解析生成仅包含名称的列表:< / p>
cnames = [c.name for c in Category.objects.all()]
或者您可以使用for循环迭代列表,并对每个对象执行任何操作。
Django已经通过 id 字段对您的数据进行了排序,因此,我想在这种情况下无需指定排序。
稍后,当您的视图返回时,您可以将列表传递到模板并进行迭代以提取您需要的内容,例如。
在您看来:
def get_categories(request):
categories = Category.objects.all()
context = {'categories': categories}
return render_to_response('template.html', RequestContext(request, context))
然后,在您的模板中:
{% for c in categories %}
<p>{{c.name}}</p>
{% endfor %}
这是一些有用的文档
希望这会有所帮助。
答案 1 :(得分:1)
似乎区分大小写,
def__unicode__(self):
return self.Name + ": " +str(self.id)
^
name
答案 2 :(得分:0)
CatName
是Category
个实例的集合。 CatName
对象没有name
属性,因为它不是Category
对象。它包含Category
个对象。
您可以遍历您的收藏并显示每个类别名称:
for category in CatName:
print category.name
至少阅读QuerySet文档是好的,即使你还没有完全掌握它。
如果您只想要最近的类别,您可以执行以下操作:
def homepage (request):
most_recent_category = Category.objects.order_by('-id')[0]
output = {
'category_name': most_recent_category.name
}
return render_to_response('forms/formsummary.html', output)