首页 > 解决方案 > Django 使用多对多数据库的选项填充下拉菜单

问题描述

我想用来自主题表的记录填充我的下拉菜单,这是一个多对多选择字段,通过从管理页面手动添加主题来填充主题。一门课程可以有许多科目,例如“商业”和“市场营销”。

代码:

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://imgur.com/a/Iw9lk6I

有人可以帮我弄清楚吗?我已经被困了一段时间了。

标签: pythondjangodjango-modelsdjango-formsdjango-templates

解决方案


创建模型表单后,您可以使用类似这样的内容来获取下拉列表

class CourseForm(forms.ModelForm):
    subjects = forms.ModelMultipleChoiceField(
        queryset=Subject.objects.all(),
        required=True,
        )
    class Meta:
        model = Course
        fields = [......, subjects]

或者您可以使用其他小部件,widget=forms.CheckboxSelectMultiple,具体取决于您的要求

<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('/')

推荐阅读