Запрос отдельного списка вариантов для формы Django с хранилищем данных 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']

person Community    schedule 02.02.2009    source источник
comment
Означает ли отдельный список address_id список отдельных (объединенных адресов address_id) из модели Locations? Если это так, обновите свой вопрос, чтобы уточнить, что у вас есть два поля, которые вы используете для проверки поля местоположения в форме.   -  person S.Lott    schedule 03.02.2009


Ответы (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)
person Jeff Bauer    schedule 02.02.2009