如何使用Django将ModelChoiceField与外部数据库值组合在一起

时间:2012-08-16 11:23:12

标签: django forms

我正在尝试使用ModelChoiceField来获取从外部数据库填充的值。

我在我的setting.py中添加了一个额外的数据库,并在我的应用程序中设置了一个externaldb.py文件,如下所示:

from django.db import connections

def Location():

    rs = []

    cursor = connections['mydb'].cursor()
    cursor.execute("SELECT city FROM db.data_center WHERE removed is null;")
    zones = cursor.fetchall()

        for v in zones[::]:
            rs.append(v)

使用python manage.py shell我可以做到这一点

>>>from platform.externaldb import Location
>>>print Location()
>>>[(u'India-01',), (u'Singapore-01',), (u'Europe-01',)]

所以我得到的是值,但是如何让它出现在下拉框中..这是我的forms.py

forms.py

from platform.externaldb import Location

zone = forms.ModelChoiceField(Location(), label='Zone')

但是这对我不起作用..我该怎么做才能让3个值出现在ModelChoiceField下拉列表中?

谢谢 - Oli

1 个答案:

答案 0 :(得分:2)

您可以使用ChoiceField表单字段,而不是ModelChoiceField。使用ModelChoiceField的问题是它需要QuerySet。 ChoiceField允许您通过列表添加项目。

locations = forms.ChoiceField(choices=Locations(), label="Zone")

修改

以前,我使用了ModelChoiceField

locations = forms.ModelChoiceField(queryset=Location.objects.all(), label="Zone")

只要Location是一个模型(根据您的代码我不确定),它就会起作用