如何在 Django 中将表单的 ModelMutiplechoiceField 引用到外键?



考虑我的模型:

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显示在模板上。但是我如何循环大调下的小调呢?

目前,我的代码看起来像这样:

视图:

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

如果我测试minor,我得到这个:

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

回答你的问题

如何遍历minor?

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

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

这将给你相关的对象,但它不会给表单html。您还可以查看访问查询集中的相关对象的表单。

最新更新