首页 > 解决方案 > 如何将表单的 ModelMutiplechoiceField 引用到 Django 中的 foreignKey?

问题描述

像这样考虑我的模型:

class Major(models.Model):
    major_name = models.CharField(max_length=100, default='', null=False)
    is_active = models.BooleanField(default=True, null=False)
    
    def __str__(self):
        return self.major_name

class Minor(models.Model):
    major_name = models.ForeignKey(Major, on_delete=models.CASCADE)
    minor_name = models.CharField(max_length=100, default='', null=False)
    is_active = models.BooleanField(default=True, null=False)
    
    def __str__(self):
        return self.minor_name

然后用这个表格:

class PreferredMinorForm(forms.Form):
    preferred_minor= forms.ModelMultipleChoiceField(
        queryset=Minor.objects.all(),
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

我可以通过次要循环显示在模板上。但是我如何循环遍历主要的次要?

目前,我的代码如下所示:

看法:

minor = PreferredMinorForm()
context['minor_list'] = minor
context['major_list'] = Major.objects.filter(is_active=True).order_by('id')

模板:

{% for major in major_list %}
    {{major}}                    
    {% for minor in minor_list %}
        # How to if statement here?
    {% endfor %}
{% endfor %}

如果我测试未成年人,我得到了这个:

<li><label for="id_minor_45"><input type="checkbox" name="minor" value="46" id="id_minor_45">DATA</label></li>

标签: django

解决方案


回答你的问题

我如何循环通过主要下的次要?

您可以使用“_set”语法访问相关模型的项目。这可用于访问外键上相关对象的集合。在您的模板中,您可以像这样访问它。

{% for major in major_list %}
    {{ major }}                    
    {% for minor in major.minor_set.all %}
        {{ minor }}
    {% endfor %}
{% endfor %}

这将为您提供相关对象,但不会提供表单 html。您还可以查看在表单中访问查询集中的相关对象。


推荐阅读