我整个下午都在浏览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)
我的模板很简单,就像这样
{{ …Run Code Online (Sandbox Code Playgroud) 我有以下表格:
class MyForm(forms.Form):
country = forms.ChoiceField(
widget = forms.Select()
)
region = forms.CharField(
widget = forms.Select()
)
def update_region(self):
self['region'].field.widget.choices = get_choices_for_region(
self['region'].field.initial)
Run Code Online (Sandbox Code Playgroud)
区域选择取决于国家选择。我有一个 ajax 例程来更新所选国家/地区的区域。我为该区域使用了 CharField,因此它将正确验证。
实际上,我在视图中使用数据预填充表单:
myform['country'].field.initial = 'Switzerland'
myform.update_region()
return ...
Run Code Online (Sandbox Code Playgroud)
问题:有没有办法强制区域选择随着更新国家/地区而自动更新?
我有使用的代码form._raw_value(fieldname)。
在Django 1.9中已消失。
有没有办法访问1.9+中的原始值?
更新资料
我只是将代码迁移到Django 1.9。到目前为止,我对那里发生的事情没有更深入的了解。