【问题标题】:How do I retrieve the values of selected checkboxes and show it in the template?如何检索选定复选框的值并将其显示在模板中?
【发布时间】:2016-12-22 13:24:35
【问题描述】:

我在做什么? 我正在对一个简单的应用程序进行培训,在该应用程序中,人们可以订购披萨并选择他的配料,一旦提交表单,它就会在模板文件中显示提交的查询。

有什么问题? 我很难在模板文件的表单中显示选中的复选框。

这是我的文件:

models.py

class PickedDatas(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)

class Picked(models.Model):
    name = models.CharField(max_length=255)
    picked = models.ManyToManyField(PickedDatas, blank=True)

forms.py

class CustomChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return mark_safe('%s' % (obj.name))

class SomeForm(forms.ModelForm):
    class Meta:
        model = Picked
        fields = ['name', 'picked']

    picked = CustomChoiceField(queryset=PickedDatas.objects.all(), widget=forms.CheckboxSelectMultiple())

views.py

def some_view(request):
    if request.method == 'POST':
        form = SomeForm(request.POST)

        if form.is_valid():
            ...
    else:
        form = SomeForm

    return render(request, 'features.html', {'form':form, 'picked':Picked.objects.all()})

至于模板文件,我使用 for 循环来显示 Picked 模型数据。

我怎样才能实现我想要做的事情?


编辑

这里是模板文件features.html

<h2>Enter your name and choose your pizza toppings</h2>
                        <form method='post'>
                            {% csrf_token %}
                            {{ form.as_p }}
                            <input type='submit' value='submit'>
                        </form>
                        {% for p in picked %}
                            <h2>Pizza For : <strong>{{ p.name }}</strong></h2>
                            <p>{{ p.picked }}</p>
                        {% endfor %}

它给了我这个 {{ p.picked }} :pizza.PickedDatas.None

【问题讨论】:

  • 既然您的问题是关于模板的,您不应该显示该模板吗?
  • @DanielRoseman 这里是模板文件,我只是没有放它,因为我不知道该怎么做才能访问选定的复选框值

标签: python django django-forms


【解决方案1】:

Picked.picked 是一个多对多字段,所以你需要遍历选项:

{% for picked in picked %}<!-- Note renamed variable to prevent clash with inner loop -->
  <h2>Pizza For : <strong>{{ picked.name }}</strong></h2>
  <p>{% for p in picked.picked.all %}{{ p }}{% endfor %}</p>
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多