2012-12-11 131 views
1

我正在處理我的第一個django項目,並且我有問題將我的數據庫中的「類別」顯示到列表中的網頁上。我收到錯誤「對象有沒有屬性 '名稱' 到目前爲止我的代碼是:Queryset對象沒有屬性「名稱」

型號:

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> 

任何人都可以指向正確的方向嗎?

+2

請記住,在Python中,變量名是大小寫敏感的,所以它應該是CatName.name因爲這是你在你的模型中定義的方式。您還應該閱讀Python代碼的PEP8樣式指南。 – israelord

回答

0

CatNameCategory實例的集合。 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) 
2

在Django中,當您使用ORM查詢的對象中,有兩個posibilities:

  • 查詢只返回一個對象:如果是,則使用管理器的get()方法查詢。
  • 查詢返回一個集合:如果是,則使用all(),filter()或任何類似的方法查詢。

在這種情況下,您的查詢返回類別對象的集合,你可以做一對夫婦的這個事情,你可以通過使用列表理解產生,只有名稱的列表:

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 %} 

下面是一些有用的文檔

希望這會有所幫助。

+0

感謝您的回覆,但我再次迷失。 香港專業教育學院改變了我所有的代碼是在正確的情況下,並從CatName.Name 取出,請將.Name 它現在讀取 '高清主頁(請求) CatName = Category.objects.order_by(「身份證」) 輸出中= { 'CATEGORY_NAME':CatName, } 選擇render_to_response回報( '形式/ formsummary.html',輸出)' 和 ''

{{ Category_Name }}
這是似乎打印出的類別,但隨着類別ID也是像這樣: '[<產品類別:工資:1>,<類別:SupportServices:2>]' 如何更改本所以它只是讀取: '工資,支持Services' ? – user1894555

+0

'CatName'是一個令人誤解的變量名稱,它可能更適合作爲'categories',因爲這是您擁有的一組類別。因爲您有多個類別需要對類別集合進行「迭代」(http://www.diveintopython.net/file_handling/for_loops.html),所以您處於正確的軌道上,您只需要一步即可通過所有類別並打印出他們的名字israelord提供瞭如何在您的模板中執行此操作的示例 – dm03514

+0

正如dm03514所述,在這種情況下,CatName是一個錯誤的變量名稱,因此您需要存儲所有類別,將是「類別」,如果你只想存儲名稱,你可以做這樣的事情:category_names = [c.name for c in Category.objects.all()] – israelord

1

這似乎是大小寫敏感的,

def__unicode__(self): 
    return self.Name + ": " +str(self.id) 
      ^
       name 
相關問題