代码之家  ›  专栏  ›  技术社区  ›  Brian

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

  •  1
  • Brian  · 技术社区  · 16 年前

    几天来,我一直在努力弄明白这一点,但却无法让它发挥作用。我去过任何地方。我会继续努力找出答案,但希望能找到更快的解决方案。我使用的是App Engine datastore+Django。

    使用视图中的查询和自定义表单,我能够获得表单的列表,但之后我无法发布。我一直在想,如何在Django表单中动态添加选项。。。我尝试过各种方法,但都没有成功。帮助

    下面是两个模型。我想在InfoForm的location字段中显示一个地址id的独特列表。这些字段可以(也许应该)被命名为相同的名称,但我认为如果它们被命名为不同的名称会更容易。

    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 回复  |  直到 16 年前
        1
  •  1
  •   Jeff Bauer    16 年前

    我不熟悉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)