使用App Engine数据存储区查询Django表单的不同选择列表

时间:2009-02-02 14:02:56

标签: python django google-app-engine

我一直试图在几天内解决这个问题几个小时,并且无法让它发挥作用。我到处都是。我会继续尝试解决这个问题,但希望能有更快的解决方案。我正在使用App Engine数据存储区+ Django。

在视图和自定义表单中使用查询,我能够获得表单的列表,但后来我无法发布。我一直试图弄清楚如何动态添加选项作为Django表单的一部分......我尝试了各种方法但没有成功。救命啊!

以下是两种型号。我想获得一个明确的address_id列表,以显示在InfoForm的位置字段中。这些字段可以(也许应该)命名相同,但我认为如果它们的名称不同会更容易。

class Info(db.Model):
    user = db.UserProperty()
    location = db.StringProperty()
    info = db.StringProperty()
    created = db.DateTimeProperty(auto_now_add=True)
    modified = db.DateTimeProperty(auto_now=True)

class Locations(db.Model):
    user = db.UserProperty()
    address_id = db.StringProperty()
    address = db.StringProperty()

class InfoForm(djangoforms.ModelForm):
    info = forms.ChoiceField(choices=INFO_CHOICES)
    location = forms.ChoiceField()
    class Meta:
            model = Info
            exclude = ['user','created','modified']

1 个答案:

答案 0 :(得分:1)

我不熟悉App Engine数据存储区,但我猜你可能想要沿着这些方向做点什么:

class InfoForm(djangoforms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(InfoForm, self).__init__(*args, **kwargs)
        choices = [(r.id, r.info) for r in Info.objects.filter(...)]
        self.fields['info'] = ChoiceField(choices=choices)

通过动态分配info,您可以从InfoForm类中排除此行:

    info = forms.ChoiceField(choices=INFO_CHOICES)