【发布时间】:2014-06-16 20:47:09
【问题描述】:
我们正在构建一个 Django 应用程序,并有一个包含两个类的模型:
class Category_Specialization (models.Model):
name = models.CharField(max_length=50)
class Specialization (models.Model):
specialization_name = models.CharField (max_length=60)
category = models.ForeignKey(Category_Specialization)
class User (models.Model):
[...]
specialization = models.ManyToManyField (Specialization)
我们创建了一个表单,用于显示字段用户的复选框:
class SpecializationForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserServiceForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.render_hidden_fields = True
self.helper.form_tag = False
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-10'
self.helper.layout = Layout(
'specialization',
FormActions(
Submit('submit', 'Create profile'),
)
)
class Meta:
model = User
fields = ['specialization']
widgets = {
'specialization' : forms.CheckboxSelectMultiple,
}
我们定义了 4 个类别和 2 个类别的专业化。现在我们想在模板中显示所有类别,并在其中显示它们的专业化。
所以,在我们制作的视图中:
list_categories = Category_Specialization.objects.order_by('name')
forms = UserSpecializationForm(request.POST or None, instance=request.user)
return render (request, 'users/profile/specialization.html', {
'list_categories' : list_categories,
'forms' : forms,
})
在我们的模板中,我们尝试这样做:
<form action="{% url 'users:specialization' %}" method="post">
{% csrf_token %}
{% for category in list_categories %}
<fieldset>
<legend>{{category.name}}</legend>
{% for form in forms %}
{% for form_field in form %}
{% if form_field.field.category.name == category.name %}
{% load crispy_forms_tags %}
{{form_field}}
{% crispy form %}
{% endif %}
{% endfor %}
{% endfor %}
</fieldset>
{% endfor %}
问题是我们的 IF 无法正常工作,因为我们没有正确访问类别名称
那么,我们如何才能在for循环中访问字段的类别名称以将表单显示在正确的类别中?
谢谢。
【问题讨论】: