考虑我的模型:
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。您还可以查看访问查询集中的相关对象的表单。