Django填充下拉菜单,从多对多数据库中进行选择

时间:2019-11-16 03:39:10

标签: python django django-models django-forms django-templates

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

代码:

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

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

2 个答案:

答案 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 %}