在django中显示管理员的多个选项

时间:2013-01-30 06:25:23

标签: python django django-models django-forms django-admin

我想向管理员展示多个选项,这样他一次可以从这些选择中选择多个选项。我可以使用复选框字段来执行此操作。我已经尝试了这个但是它没有显示复选框,而是显示了下拉列表中的选项。

这是我的代码。

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) 

forms.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

3 个答案:

答案 0 :(得分:2)

您需要从 models.py 中的模型字段定义中删除choices参数,并将choices字段添加到Rules表单字段> forms.py 即可。像这样:

<强> 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") 

<强> forms.py

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

答案 1 :(得分:0)

是的,你可以做到这一点。您需要将MultipleChoiceField字段与CheckboxSelectMultiple小部件一起使用才能执行此操作。我认为你做得对,但也许你在小部件中忘了()

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']

我投入了验证方法。您可以对所选择的选项数量进行限制。

答案 2 :(得分:0)

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

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

我认为您()

的发送时不需要CheckboxSelectMultiple