【发布时间】:2017-02-11 04:31:15
【问题描述】:
我这里有问题希望你能帮忙..
这就是我想要实现的目标。
基本上,我有一个小的 Web 应用程序,其中有 3 个表单。
我要求name 和age 的主要形式
一种给老人的形式,另一种给年轻人的形式
我将在模板中看到的第一个表单将是第一个表单,我将在其中输入 name 并选择是老人还是年轻人。
一旦我选择young 或old,它就会按预期工作,如果我输入old,它将用Jquery 显示相应的form,我会看到老人的表格,如果我输入年轻的我'会看到年轻人的表格。
Jquery 一切正常,除了第一种形式。
我只需要在模板中将我的第一个表单显示为modelform。
我知道我可以使用普通格式使其完美运行,但我需要将 age 和 name 保存在我的数据库中。
这是我的模型:
AGES = (
('OLD', 'OLD'),
('YOUNG', 'YOUNG '),
)
class Person(models.Model):
name = models.TextField()
age = models.CharField(max_length=128,choices=AGES, default=True)
def __str__(self):
return self.name
class Questions_old(models.Model):
person = models.ForeignKey(Person)
country = models.TextField()
hobbies = models.TextField()
def __str__(self):
return self.person.name
class Questions_young(models.Model):
person = models.ForeignKey(Person)
country = models.TextField()
parents = models.TextField()
def __str__(self):
return self.person.name
我的表格:
class personForm(forms.ModelForm):
class Meta:
model = Person
fields = ["age","name"]
def __init__(self, *args, **kwargs):
super(personForm, self).__init__(*args, **kwargs)
self.fields['age'].choices = [(e.id, e.age) for e in Person.objects.all()]
class person_oldForm(forms.ModelForm):
class Meta:
model = Questions_old
exclude = ('name',)
fields = ['country','hobbies']
class person_youngForm(forms.ModelForm):
class Meta:
model = Questions_young
exclude = ('name',)
fields = ['country','parents']
观看次数:
def person_form(request):
form1 = personForm(request.POST or None)
form2 = person_oldForm(request.POST or None)
form3 = person_youngForm(request.POST or None)
queryset1 = Person.objects.all()
queryset2 = Questions_old.objects.all()
queryset3 = Questions_young.objects.all()
context = {
"form1": form1,
"form2": form2,
"form3": form3,
"queryset1": queryset1,
}
form1_valid = form1.is_valid()
form2_valid = form2.is_valid()
form3_valid = form3.is_valid()
if form1.is_valid():
person = form1.save()
if form2_valid:
qo = form2.save(commit=False)
qo.person = person
qo.save()
if form3_valid:
qy = form3.save(commit=False)
qy.person = person
qy.save()
return render(request, "person.html", context)
模板:
<div class="form-group">
<select id="age" name="age">
{% for x,y in form.fields.age.choices %}
<option value="{{ x }}"{% if form.fields.age.value == x %} selected{% endif %}>{{ y }}</option>
{% endfor %}
</select>
</div>
<div id="form" class="ages" style="display:none;">
<form method="POST" action="">{% csrf_token %}
{{ form2|crispy }}
<button type="submit" name="submit" class="btn btn-success btn-xs">
<span class="fa fa-floppy-o"></span> Guardar
</button>
</form>
</div>
<div id="form1" class="ages" style="display:none;">
<form method="POST" action="">{% csrf_token %}
{{ form3|crispy }}
<button type="submit" name="submit" class="btn btn-success btn-xs">
<span class="fa fa-floppy-o"></span> Guardar
</button>
</form>
</div>
<script>
$('#age').on('change',function(){
if( $(this).val()==="old"){
$("#form").show()
}
else{
$("#form").hide()
}
if( $(this).val()==="young"){
$("#form1").show()
}
else{
$("#form1").hide()
}
});
</script>
当我运行我的代码时,我得到了一个空的 select ,它没有按预期显示我的选择..
我怎样才能让它运作良好?
提前致谢!
【问题讨论】:
-
您的
Person表中目前有任何条目吗?看起来您正在使用该表中的项目作为您的选择。 -
如果你只想显示老和年轻,删除
personForm的__init__方法应该可行,因为 django 将从你的模型字段中选择选项。
标签: jquery python django forms