2013-03-03 61 views
0

在我的練習中,我有一本書的Django模型,有一個字段「類型」。該字段有以下幾個選項的選擇在模板中顯示模型字段的可能選擇

GENRES_CHOICE = (
       ('ADV','Adventure'), 
       ('FAN','Fantasy'), 
       ('POE','Poetry'), 
       ) 

和模型領域是

genre = models.CharField(max_length = 3, blank = False, choices = GENRES_CHOICE, db_index = True, editable = False) 

在我的模板,我想展現給用戶的類型列表中(冒險,幻想,詩歌)和hava提供密鑰,以便可能將它們用作參數。

爲了做到這一點,我想有一個函數返回數據結構GENRES_CHOICE,但我不能。如何解決這個問題呢?

編輯: 更多的代碼細節

APPNAME = mybookshelf,文件 - >型號/ Book.py

# possible choices for the gerne field 
GENRES_CHOICE = (
        ('ADV','Adventure'), 
        ('FAN','Fantasy'), 
        ('POE','Poetry'), 
       ) 

class Book(models.Model): 
    """ 
    This is the book model 

    ... 

## ATTRIBUTES (better use init, but in Django not always possible) 
    id = models.CharField(max_length = 64, blank = False, unique = True, primary_key = True, editable = False) 
    """ unique id for the element """ 

     genre = models.CharField(max_length = 3, blank = False, choices = GENRES_CHOICE, db_index = True, editable = False) 
    """ book genre """ 

    published_date = models.DateField(null = True, auto_now_add = True, editable = False) 
    """ date of publishing """ 

然後到另一個文件,可以說MyFunctions.py我有

from mybookshelf.models import GENRES_CHOICE 

    def getBookCategories(): 
     """ 
     This function returns the possible book categories 

     categories = GENRES_CHOICE 

     return categories 
+1

您是否使用modelform?或者你希望它直接顯示在模板中? – catherine 2013-03-03 13:25:38

+0

不,我沒有使用模型,我想知道是否有可能「直接」顯示模板中的數據。 – klebe85 2013-03-03 13:29:10

+0

是的,這是可能的。只需撥打GENRES_CHOICE從模型到視圖 – catherine 2013-03-03 13:31:25

回答

2

views.py

from app_name.models import GENRES_CHOICE 

def view_name(request): 
    ............... 

    return render(request, 'page.html', { 
     'genres': GENRES_CHOICE 
    }) 

page.html中

{% for genre in genres %} 
    {{genre.1}}<br/> 
{% endfor %} 
+0

我真的很抱歉打擾,但這並不工作給我。我有一個導入錯誤。我還嘗試「從app_name.models導入模型名稱」,並引用爲類別= GENRES_CHOICE或類別= model_name.GENRES_CHOICE,並在任何情況下它doesnt工作。 :/你可以想象我在我的第一個Django的經驗(實際上參考文檔並沒有幫助我那麼多) – klebe85 2013-03-03 14:08:32

+0

@RobertoParrotto沒關係只是發佈您的models.py代碼,並會嘗試修復它 – catherine 2013-03-03 14:18:41

+0

我編輯了主要職位更多的代碼。謝謝@凱瑟琳。 – klebe85 2013-03-03 14:30:24

0

我不是100%肯定這是你所追求的,但如果你想顯示給用戶,你可以在你的templete做到這一點GENRES_CHOICE名單:

{% for choice_id, choice_label in genres %} 
      <p> {{ choice_id }} - {{ choice_label }} </p>   
{% endfor %} 

ofcourse通過GENRES_CHOICE作爲流派

0

你可以在你的模板中使用get_modelfield_display()方法,例如:

{{ book.get_genre_display }} 
相關問題