【发布时间】:2021-04-28 17:54:57
【问题描述】:
我很难学习 Django :)
我有以下行(可能不是最好的形式,但到目前为止它们都有效):
models.py
class Mani(models.Model):
title = models.CharField(max_length=64)
description = models.TextField()
duration = models.ForeignKey(Duration, on_delete=models.CASCADE)
price = models.PositiveSmallIntegerField()
def __str__(self):
return "%s %s kostet €%s und dauert %s min" % (self.title, self.description, self.price, self.duration.duration)
forms.py
class ManiForm(forms.Form):
service_title = forms.ModelChoiceField(widget=forms.RadioSelect(attrs={'class': 'serviceForm'}), label='Bitte whälen Sie Ihre Packet', queryset=Mani.objects.all())
views.py
def booking_service_detail(request, pk):
service = Service.objects.get(pk=pk)
if request.method == 'POST':
service_form = ManiForm(request.POST)
mani = Mani.objects.get(pk=pk)
return render(request, template, {
'service': service,
'service_form': service_form,
'extra_form': extra_form,
'mani': mani
})
mani = Mani.objects.all()
service_form = ManiForm()
context = {
'service': service,
'service_form': service_form,
}
return render(request, template, context)
最后是 html 的一部分:
<div class="content">
<form action="" method="POST">
{% csrf_token %}
<h3>Bitte whälen Sie Ihre Packet</h3>
<ul class="serviceForm">
{% for radio in service_form.service_title %}
<li>
{{ radio }}
</li>
{% endfor %}
</ul>
{% if extra_form %}
<h4>Bitte whälen Sie Ihre Extra</h4>
<p>{{ mani.pk }}</p>
<ul class="serviceForm">
{% for radio in extra_form.extra_title %}
<li>
{{ radio }}
</li>
{% endfor %}
</ul>
{% endif %}
<input type="submit" value="Auswählen">
</form>
这里的 li 项目之一:
{% for radio in service_form.service_title %}
<li>
{{ radio }}
</li>
{% endfor %}
在我按下提交按钮并出现第二个表单后,获取的属性为已检查。我想根据第一个表单中选中项目的值过滤从第二个表单出现的项目。 HTML interpretation of the page
如何在views.py中获取选中项的值?
【问题讨论】:
-
你的extra_form代码在哪里?
-
extra_form 的代码是 HTML 中的第二个 ul,在 view.py 中如果 request.method == 'POST' 则在里面
-
你可以简单地做
service_form.cleaned_data['service_title']。看我的回答。是你想要的吗? -
如何定义“extra_form”?您的“extra_form”包含哪些字段?分享您的代码
-
谢谢 NKSM,您的建议对我帮助很大,现在我设法让一切正常:)
标签: django