Django动态形式 - 即时现场人口?

Luc*_*ike 19 django django-forms

我整个下午都在浏览Django文档和谷歌搜索结果,而且我仍然在尝试创建一个动态表单.我希望我只需要有人在正确的方向上推动我:-)我刚刚开始学习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)
Run Code Online (Sandbox Code Playgroud)

所以假设我想要一个类似下拉选择字段的东西,填充数据库中每个轮询的问题.我还想要一个文本字段,它显示当前所选轮询的相应选项,只要用户选择不同的池,它就会即时更新.我已经能够通过放置一个按钮并将信息发回表单来解决这个问题.但是,我正在尝试在用户进行选择时自动执行此操作.我的观点目前看起来像这样:

#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(),
    })
Run Code Online (Sandbox Code Playgroud)

我的模板很简单,就像这样

{{ object }}
{{ object2 }}
Run Code Online (Sandbox Code Playgroud)

我确定我要创建表单的方式可能也不是最好的,所以请随意批评:-)正如我所提到的,我已经阅读了涉及重新发布表单的解决方案,但我想要这个即时发生...如果我可以透明地重新发布那么我认为这样会很好.我也看过可以让你动态创建表单的库,但这看起来有些过分.

dan*_*ray 6

这是一种方法 - Django/jQuery Cascading Select Boxes?

您可以创建一个只将json呈现为字符串的新视图,然后在从第一个从该json动态加载数据的列表中选择时触发事件.