2013-03-03 83 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 }}