3

我正在尝试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.

任何帮助表示赞赏。

4

1 回答 1

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}))这行不通,因为nome未在方法中定义。如果你想访问 nome ,你可以这样做,hello.nome因为正如你定义的那样,它nome是类中的一个类变量,hello所以你必须通过类来访问它。

于 2013-04-29T03:24:33.127 回答