如何在django中获得选中的单选按钮的pk

  • 本文关键字:单选按钮 pk django django
  • 更新时间 :
  • 英文 :


我正在努力学习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 %}

在我按下提交按钮并出现第二个表单后,的属性为checked。我想根据第一个表单中选中的项的值过滤第二个表单中出现的项。页面的HTML解释

如何在views.py中获得选中项的值?

您可以从request.POSTform.cleaned_data中获得您的值

参见访问"干净"数据

if request.method == 'POST':
service_form = ManiForm(request.POST)
mani = Mani.objects.get(pk=pk)
service_title = service_form.cleaned_data['service_title']
extra_form.fields['extra_title'].queryset = ...filter your objects by service_title here...

return render(request, template, {
'service': service,
'service_form': service_form,
'extra_form': extra_form,
'mani': mani
})

或模板

{% for choice in extra_form.extra_title.field.queryset %}
{% if choice.mani.pk == mani.pk %}
{{ choice.pk }} - {{ choice.title }}
{% endif %}
{% endfor %}

最新更新