我正在创建一个Django表单,允许选择多个选项(复选框),并在数据库中存储字符列表。后端工作正常,但前端渲染不好。 实际上,html中没有出现复选框
这是我在models.py中所做的
from django.db import models
class MyModel(models.Model):
field = models.CharField(max_length=70, default='good')
在forms.py中
from django import forms
from .models import MyModel
CHOICES = (
('good', 'good'),
('c1', 'c1'),
('c2', 'c2'),
('c3', 'c3'),
('c4', 'c4'),
)
class MyForm(forms.ModelForm):
field = forms.MultipleChoiceField(
choices=CHOICES,
widget=forms.CheckboxSelectMultiple,
)
class Meta:
model = MyModel
fields = ['field', ]
In views.py
from django.contrib import messages
from django.shortcuts import render, redirect
from .forms import MyForm
def new_odontogram(request):
my_form = MyForm()
if request.method == 'POST':
my_form = MyForm(request.POST)
if my_form.is_valid():
my_form.save()
messages.success(request,'Data stored !')
return redirect('index')
return render(request, 'my_form_page.html', {'my_form': my_form})
下面的html代码在my_form_page.html中适用于后端:
<form method="post">
{% csrf_token %}
{{ my_form.as_p }}
<a href="{% url 'index' %}">
<button type="submit">Record</button>
</a>
</form>
但是,正如我在开始时提到的,没有显示任何框,我希望对它们进行成本分析。因此,我在某个地方读到,有一种方法可以循环使用这些选项,并添加一个有助于显示这些框的选项
所以我试了一下:
{% for option in my_form.field %}
<label for="{{ option.id_for_label }}">
<input type="checkbox" value="{{ option.choice_label }}" id="{{ option.id_for_label }}">
<span class="checkable">{{ option.choice_label }}</span>
</label>
{% endfor %}
这样我可以看到显示的框,但后端已损坏。如果您能帮助我正确设置这个html循环,我将不胜感激。我想name参数缺失了,但我不知道应该包含什么
这是在Django3.0.5和Python3.6.9上运行的,我正在使用CSS进行样式设置
提前谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐