整个下午,我一直在浏览Django文档和Google搜索结果,但在尝试创建动态表单时仍然有些困难。我希望我只需要一个人来朝着正确的方向 push 我:-)我才刚刚开始学习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 目前看起来像这样:
#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 }}
我确定创建表单的方式可能也不是最好的,所以也可以批评一下:-)正如我提到的,我已经阅读了涉及重新发布表单的解决方案,但是我想要这个即时发生...如果我可以透明地重新发布,那很好。我还看到了可以让您动态创建表单的库,但这似乎有点过头了。
最佳答案
这是一种方法-Django/jQuery Cascading Select Boxes?
您可以创建一个仅将json呈现为字符串的新 View ,
然后,当您从第一个列表中选择完成时触发一个事件,该列表从该json动态加载数据。
关于django - Django动态表单-实时字段填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998428/