我想用主题表中的记录填充下拉菜单,这是一个多对多选择字段,通过从管理页面手动添加它们来填充主题。一门课程可以包含许多主题,例如“商业”和“市场营销”。
代码:
我将如何使用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循环来做到这一点?
对于循环,我尝试过但没有运气:
所需结果:
有人可以帮我弄清楚吗?我已经被卡住了一段时间了。
答案 0 :(得分:0)
创建模型表格后,您可以使用类似的方法获取下拉列表
def generate_random(n):
for i in range(n):
yield random.randint(1,100)
print([x for x in generate_random(10)])
或者您可以根据需要使用其他小部件widget = forms.CheckboxSelectMultiple
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>
答案 1 :(得分:0)
在这里希望这有助于您在查询多对多字段时丢失.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 %}