2

我想向管理员显示多个选项,以便他一次可以从这些选项中选择多个选项。我可以使用复选框字段来做到这一点。我已经尝试过了,但它没有显示复选框,而是显示了下拉选项列表。

这是我的代码。

模型.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)

管理员.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

模型.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

是的,你可以这么做。您需要使用带有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 回答
0

我正在使用它并且它工作正常

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

我认为您不需要()发送CheckboxSelectMultiple

于 2013-01-30T08:50:22.150 回答