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)
我确定我要创建表单的方式可能也不是最好的,所以请随意批评:-)正如我所提到的,我已经阅读了涉及重新发布表单的解决方案,但我想要这个即时发生...如果我可以透明地重新发布那么我认为这样会很好.我也看过可以让你动态创建表单的库,但这看起来有些过分.
这是一种方法 - Django/jQuery Cascading Select Boxes?
您可以创建一个只将json呈现为字符串的新视图,然后在从第一个从该json动态加载数据的列表中选择时触发事件.