我想用主题表中的记录填充下拉菜单,主题表是一个多对多选择字段,通过从管理页面手动添加主题来填充主题。一门课程可以有许多科目,如"商业"one_answers"市场营销"。
代码:
https://dpaste.de/825n
我该如何使用django-select2或使用具有模型选择或多模型选择的表单?
https://docs.djangoproject.com/en/2.2/ref/forms/fields/#modelchoicefield
https://docs.djangoproject.com/en/2.2/ref/forms/fields/#modelmultiplechoicefield
https://django-select2.readthedocs.io/en/latest/
或者我可以在模板上使用for循环来完成它?
对于循环,我尝试过,但没有成功:
https://dpaste.de/5MVi
期望结果:
https://i.stack.imgur.com/qdMjE.jpg
有人能帮我弄清楚吗?我已经被困了一段时间了。
这里希望这能帮助您在查询多对多字段时错过上的.all((。您也没有深入到多对多字段的实际名称,所以您试图在循环中打印对象。
示例视图:
def tester(request):
tes = Test.objects.get(id=1)
testlist = tes.category.all()
context = {
'test': testlist,
}
return render(request, 'core/t.html', context)
示例循环:
{% for item in test %}
<p>- {{item.cat}}</p>
{% endfor %}
示例模型:
class cats(models.Model):
cat = models.CharField(max_length=10,)
class Test(models.Model):
name = models.CharField(max_length=10,)
category = models.ManyToManyField(cats)
嵌套循环示例:
{% for item in item_list %}
<h2>{{ item.name }}</h2>
<ul>
{% for sub in item.subjects.all %}
<li><a href="#" id="">{{ sub.name }}</a></li>
{% endfor %}
</ul>
{% endfor %}
创建模型表单后,您可以使用类似的方法来获得下拉
class CourseForm(forms.ModelForm):
subjects = forms.ModelMultipleChoiceField(
queryset=Subject.objects.all(),
required=True,
)
class Meta:
model = Course
fields = [......, subjects]
或者你可以使用其他小部件,小部件=表单。复选框选择多个,取决于你的要求
<form method="post" action="">
<div>
{% csrf_token %}
{{ form }}
<input type="submit" class="btn btn-primary" id="submit" value="Save">
</div>
</form>
添加一个创建视图来创建一个类似下面的课程
class CourseCreateView(CreateView):
model = Course
form_class = CourseForm
template_name = 'course_form.html'
success_url = reverse_lazy('/')