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:

listbox

Моя проблема в том, что я хотел бы, чтобы вместо этого списка был флажок, чтобы отметить все, что я хочу быть активным.

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'}
            ),
        }
Вернуться на верх