Динамические формы Django - заполнение полей на лету?

Я просматривал документацию Django и результаты поиска Google весь день, и я все еще несколько застрял в своей попытке создать динамическую форму. Я надеюсь, что мне просто нужен кто-то, кто подтолкнет меня в правильном направлении :-) Я только начинаю изучать Django, так что я все еще новичок; однако я уже являюсь промежуточным пользователем Python.

Я пытаюсь создать динамическую форму, в которой пользователь делает выбор из раскрывающегося меню, и на основе этого выбора другая часть формы будет автоматически обновляться для отображения результатов, соответствующих текущему выбранному элемент, но из другой таблицы базы данных.

Я попробую использовать упрощенную версию моделей из учебника Django, чтобы лучше проиллюстрировать то, что я пытаюсь сделать:

# models.py
from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)

Допустим, я хочу иметь что-то вроде раскрывающегося поля выбора, заполненного с вопросом из каждого опроса в базе данных. Я также хочу иметь текстовое поле, в котором отображаются соответствующие варианты для текущего выбранного опроса, который будет обновляться на лету всякий раз, когда пользователь выбирает другой пул. Я смог выяснить это, разместив кнопку и отправив информацию обратно в форму; Однако я пытаюсь сделать это автоматически, когда пользователь делает выбор.На данный момент мое представление выглядит примерно так:

#view.py
from django import forms
from django.shortcuts import render_to_response

from myapp.models import Poll,Choice

class MyModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s" % obj.question

class PollSelectionForm(forms.Form):
    polls = MyModelChoiceField( queryset=Poll.objects.all() )

class ChoiceResults(forms.Form):
    def __init__(self, newid, *args, **kwargs):
        super(ChoiceResults, self).__init__(*args, **kwargs)

        self.fields['choice'] = forms.TextField( initial="" )

def main(request):
    return render_to_response("myapp/index.html", {
        "object": PollSelectionForm(), 
        "object2": ChoiceResults(),
    })

Мой шаблон очень прост, примерно что-то вроде

{{ object }}
{{ object2 }}

Я уверен, что способ, которым я собираюсь создавать формы, вероятно, тоже не лучший, так что почувствуйте Можно также критиковать это :-) Как я уже упоминал, я читал решения, связанные с репостом формы, но я хочу, чтобы это происходило на лету ... если я могу репостить прозрачно, тогда это будет нормально, я думаю. Я также видел библиотеки, которые позволят вам динамически создавать формы, но это кажется излишним.

19
задан Lucky Mike 25 January 2012 в 05:49
поделиться