仅显示ModelForm字段的一些选项

时间:2015-02-02 16:53:22

标签: django django-models

假设我有以下模型

class MyChoiceModel(models.Model):
    mychoices = (('ChoiceA', 'ChoiceA'), ('ChoiceB', 'ChoiceB'))

和以下ModelForm

class MyChoiceModelForm(forms.ModelForm):
    #...
    class Meta:
        model = MyChoiceModel
        fields = ('mychoices', )

现在,用户可以选择所有类型的选择(ChoiceAChoiceB)。 我现在想要的是,某些选择值不会被显示出来。

如何过滤来自mychoices的可用选项,例如,用户只能选择ChoiceA,而在其他情况下,只能选择ChoiceB

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点:这是我的一种方式

def CustomChoiceList():
    # return custom choices

class MyChoiceModelForm(forms.ModelForm):
    class Meta:
        widgets = { 'mychoices': CustomChoiceList() }

如果您需要更多控制权,或者访问模型,请查看创建forms.ModelChoiceField)

例如:

class CustomChoices(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        # return some obj.title, or whatever in your object as the label to show

然后在ModelForm中

mychoices = CustomChoices(required=True, queryset=YourModelYouWant.objects.filter(...))