1

更新:カスタム ウィジェットを作成する必要があるようです ( Django の Grouping CheckboxSelectMultiple Options )。完了したら、最終的なコードを含めます。

別のSO questionと同様に、django フォームに選択フィールドを設定しました。

ただし、ウィジェットにしたいのですが、CheckboxSelectMultipleメタクラスで行うと、グループ全体のチェックボックスが作成されます。これは で行う必要があり__init__ますか?

class FooIterator(models.ModelChoiceIterator):
    def __init__(self, *args, **kwargs):
        super(models.ModelChoiceIterator, self).__init__(*args, **kwargs)
    def __iter__(self):
        for thing in MyModel.objects.all():
            yield (thing.name, [(x.id, x.name) for x in MyModel2.objects.filter(name=thing.name)])

class MyForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myField'].choices = FooIterator()
        for x in self.fields:
            self.fields[x].widget.attrs['class'] = 'input-block-level'
4

3 に答える 3

0

カスタムウィジェットを作成することが道のりだったようです-DjangoのGroupingCheckboxSelectMultipleOptionsによると

注:Django Selectウィジェットで選択肢をグループ化する方法に従ってイテレーターを削除しましたか?

于 2013-01-30T17:49:03.687 に答える
0
class MyForm(ModelForm):
    field_name = forms.MultipleChoiceField(required=False,
        widget=CheckboxSelectMultiple)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['field_name'].widget.attrs['class'] = 'input-block-level'
        self.fields['field_name'].choices = self._get_choices()

    def _get_choices(self):
        return [(val.data1, val.data2) for val in Model.objects.filter()]
于 2013-01-30T18:08:53.787 に答える