我正在尝试使用db查询中的列表在hello.html
上生成一个选择菜单。
我的models.py
:
class hello(models.Model):
q = """
SELECT * FROM ZONAS
WHERE cod_zona = 1
"""
db.query(q)
nome = db.query(q)
title = models.CharField(max_length=3, choices=nome)
def __unicode__(self):
return self.name
和my views.py
:
def contato(request):
form = hello()
return render_to_response(
'hello.html',
locals(),
context_instance=RequestContext(request),
)
def hello_template(request):
form = hello()
t = get_template('hello.html')
html = t.render(Context({'name' : nome}))
return HttpResponse(html)
我被困在:ERROR testApp.hello: "title": "choices" should be a sequence of two-tuples.
任何帮助都很感激。
答案 0 :(得分:2)
这正是发生的事情。选择字段的格式必须是元组的元组,如下所示:
CHOICES=(
('f','foo'),
('b','bar'),
)
因此,为了让您的示例正常工作,nome
必须以某种符合预期类型的方式进行初始化,如下所示:
nome=((x,x) for x in db.query(q))
但要小心。您应该避免对数据库执行直接sql
查询,甚至更多那种简单查询。应该有一种更好的方法,比如将数据库调用封装到方法或类似的东西中。
另外我注意到在hello_template
中,您尝试将nome
的值分配给行'name'
中的html = t.render(Context({'name' : nome}))
字段,但这不起作用,因为{{1}没有在方法中定义。如果您想访问nome,可以像nome
那样进行操作,因为正如您所定义的那样,hello.nome
是nome
类中的类变量,因此您必须通过类访问它。