Python Django Form - проблема с чекбоксами в ModelMultipleChoiceField
У меня есть эта модель
class ProjectMember(models.Model):
member_name = models.CharField(max_length=100)
member_uid = models.CharField(max_length=15)
member_reviewer_uid = models.CharField(max_length=15)
member_roles = models.ManyToManyField('ProjectRole', blank=False)
member_discipline = models.ManyToManyField('ProjectDiscipline', blank=False)
class ProjectRole(models.Model):
role_name = models.CharField(max_length=10, unique=True)
def __str__(self):
return self.role_name
Эта форма
class ProjectMemberForm(forms.ModelForm):
class Meta:
model = ProjectMember
fields = (
'member_name',
'member_uid',
'member_reviewer_uid',
'member_roles'
)
# member_roles = forms.ModelChoiceField(
member_roles = forms.ModelMultipleChoiceField(
queryset=ProjectRole.objects.all(),
widget=forms.CheckboxSelectMultiple(attrs={'class': 'form-control'}),
required=True,
# empty_label=None, # Hide the empty label for the select multiple widget.
)
widgets = {
'member_name': forms.TextInput(attrs={'class': 'form-control'}),
'member_uid': forms.TextInput(attrs={'class': 'form-control'}),
'member_reviewer_uid': forms.TextInput(attrs={'class': 'form-control'}),
}
Я также попробовал закомментированные строки кода.
Я все еще получаю только это Я бы назвал это listbox
вместо checkboxes
:
Моя проблема в том, что я хотел бы, чтобы вместо этого списка был флажок, чтобы отметить все, что я хочу быть активным.
EDIT: Обратите внимание, что я не собираюсь сохранять какие-либо данные в базе данных. Он будет работать как сервер конфигурации, и на выходе будет .xml
файл.
Вставьте вместо этого виджет CheckboxSelectMultiple
[Django-doc] для работы с `ManyToManyField:
class ProjectMemberForm(forms.ModelForm):
class Meta:
model = ProjectMember
fields = (
'member_name',
'member_uid',
'member_reviewer_uid',
'member_roles',
)
widgets = {
'member_name': forms.TextInput(attrs={'class': 'form-control'}),
'member_uid': forms.TextInput(attrs={'class': 'form-control'}),
'member_reviewer_uid': forms.TextInput(
attrs={'class': 'form-control'}
),
'member_roles': forms.CheckboxSelectMultiple(),
}
или определите поле там, где оно должно быть: в классе формы, а не в классе Meta
:
class ProjectMemberForm(forms.ModelForm):
member_roles = forms.ModelMultipleChoiceField(
queryset=ProjectRole.objects.all(),
widget=forms.CheckboxSelectMultiple(attrs={'class': 'form-control'}),
required=True,
# empty_label=None, # Hide the empty label for the select multiple widget.
)
class Meta:
model = ProjectMember
fields = (
'member_name',
'member_uid',
'member_reviewer_uid',
'member_roles',
)
widgets = {
'member_name': forms.TextInput(attrs={'class': 'form-control'}),
'member_uid': forms.TextInput(attrs={'class': 'form-control'}),
'member_reviewer_uid': forms.TextInput(
attrs={'class': 'form-control'}
),
}