带有db查询的Django charfield模型

时间:2013-04-28 20:49:17

标签: python mysql django request models

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

任何帮助都很感激。

1 个答案:

答案 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.nomenome类中的类变量,因此您必须通过类访问它。