模型名称未出现在多选字段中
The name of the model does not appear in the multiple choice field
我正在尝试创建一个包含多选字段的表单。我有一个 SchoolClass 模型,我想在表单中 select 多个 类。我可以在表格中 select SchoolClasses 但它没有显示任何标签。我不知道如何将名称传递给选择字段。
表格如下:
class ExamForm(forms.Form):
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super(ExamForm, self).__init__(*args, **kwargs)
self.fields['classes'].choices=SchoolClass.objects.filter(school_id=teacher.school_id)
我正在获取 SchoolClass 对象以供选择
classes = forms.MultipleChoiceField(choices=(), widget = forms.CheckboxSelectMultiple,
label = "Classes for this exam.")
当我 运行 我的项目时,它显示如下:
Blank choice fields
choices
期望二元组的迭代,其中第一项是键,第二项是渲染值。
因此您可以通过以下方式实现:
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super(ExamForm, self).__init__(*args, **kwargs)
self.fields['classes'].choices = [
<b>(s.pk, str(s))</b>
for s in SchoolClass.objects.filter(school_id=teacher.school_id)
]
不过,使用 ModelMultipleChoiceField
[Django-doc] 可能会更好,因为那样我们就可以简单地使用查询集,所以类似于:
class MyForm(forms.Form):
classes = forms.<b>ModelMultipleChoiceField</b>(
queryset=SchoolClass.objects.none(),
widget = forms.CheckboxSelectMultiple,
label = 'Classes for this exam.'
)
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['classes']<b>.queryset = SchoolClass.objects.filter(school_id=teacher.school_id)</b>
我正在尝试创建一个包含多选字段的表单。我有一个 SchoolClass 模型,我想在表单中 select 多个 类。我可以在表格中 select SchoolClasses 但它没有显示任何标签。我不知道如何将名称传递给选择字段。
表格如下:
class ExamForm(forms.Form):
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super(ExamForm, self).__init__(*args, **kwargs)
self.fields['classes'].choices=SchoolClass.objects.filter(school_id=teacher.school_id)
我正在获取 SchoolClass 对象以供选择
classes = forms.MultipleChoiceField(choices=(), widget = forms.CheckboxSelectMultiple,
label = "Classes for this exam.")
当我 运行 我的项目时,它显示如下:
Blank choice fields
choices
期望二元组的迭代,其中第一项是键,第二项是渲染值。
因此您可以通过以下方式实现:
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super(ExamForm, self).__init__(*args, **kwargs)
self.fields['classes'].choices = [
<b>(s.pk, str(s))</b>
for s in SchoolClass.objects.filter(school_id=teacher.school_id)
]
不过,使用 ModelMultipleChoiceField
[Django-doc] 可能会更好,因为那样我们就可以简单地使用查询集,所以类似于:
class MyForm(forms.Form):
classes = forms.<b>ModelMultipleChoiceField</b>(
queryset=SchoolClass.objects.none(),
widget = forms.CheckboxSelectMultiple,
label = 'Classes for this exam.'
)
def __init__(self, class_choices, teacher_choices,teacher, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['classes']<b>.queryset = SchoolClass.objects.filter(school_id=teacher.school_id)</b>