2

管理者に複数の選択肢を表示して、一度に複数の選択肢を選択できるようにしたいと考えました。チェックボックスフィールドを使用してこれを行うことができます。これを試しましたが、チェックボックスを表示する代わりに、選択肢のドロップダウンリストが表示されます。

これが私のコードです。

models.py

class segmentation_Rules(models.Model):
        Segmentation_Rules_CHOICES = (
                        (1, 'At least one order'),
                        (2, 'Have reward points'),
                        )
        Rules       =models.CharField(max_length=100, blank=True,verbose_name="Select rules for customer segmentation",choices=Segmentation_Rules_CHOICES) 

フォーム.py

class Segmentation_Form(ModelForm):
        Rules = forms.MultipleChoiceField( widget=forms.CheckboxSelectMultiple)

admin.py

class MyAdmin(admin.ModelAdmin):
    form = Segmentation_Form

管理者が選択肢から複数のフィールドを選択できるようにする方法を教えてください。

編集:

そして、モデルから選択肢を削除してフォームに定義すると、管理者に表示されるテキスト フィールドだけになり、選択肢はありません。

Segmentation_Rules_CHOICES = (
            (1, 'At least one order'),
            (2, 'Have reward points'),
            )

class Segmentation_Form(ModelForm):
        Rules = forms.MultipleChoiceField(choices=Segmentation_Rules_CHOICES, widget=forms.CheckboxSelectMultiple())

        class Meta:
            model=segmentation_Rules
4

3 に答える 3

2

models.pychoicesのモデル フィールド定義から引数を削除し、 forms.pyのフォーム フィールドにフィールドを追加する必要があります。そのようです:choicesRules

models.py

class segmentation_Rules(models.Model):
    Segmentation_Rules_CHOICES = (
        (1, 'At least one order'),
        (2, 'Have reward points'),
    )
    Rules = models.CharField(max_length=100, blank=True, verbose_name="Select rules for customer segmentation") 

フォーム.py

class Segmentation_Form(ModelForm):
    Rules = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=models.segmentation_Rules.Segmentation_Rules_CHOICES)
于 2013-02-13T21:01:57.243 に答える
0

私はこれを使用しており、正常に動作しています

Rules = forms.MultipleChoiceField(choices=mychoices, widget=forms.CheckboxSelectMultiple)

()の送信時に必要ないと思いますCheckboxSelectMultiple

于 2013-01-30T08:50:22.150 に答える
0

はい、できます。これを行うには、 CheckboxSelectMultipleウィジェットでMultipleChoiceFieldフィールドを使用する必要があります。私はあなたがそれを正しくやっていると思いますが、多分あなたはウィジェットを忘れましたか?()

class Segmentation_Form(forms.Form):
    Rules = forms.MultipleChoiceField(choices= Segmentation_Rules_CHOICES, widget=forms.CheckboxSelectMultiple())

    def clean_Rules(self):
        if len(self.cleaned_data['Rules']) > 3:
            raise forms.ValidationError('Select no more than 3.')
        return self.cleaned_data['Rules']

検証メソッドを投入しました。選択する選択肢の数を制限できる場所。

于 2013-01-30T06:36:41.040 に答える