【问题标题】:How to get the pk of the selected radio button in django如何在django中获取所选单选按钮的pk
【发布时间】: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


【解决方案1】:

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

另见Accessing “clean” 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 %}

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2014-09-09
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2016-06-21
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多