仅显示 ModelForm 字段的一些选择

Show only some choices for ModelForm field

假设我有以下模型

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

和下面的ModelForm

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

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

我如何从 mychoices 中筛选出可用的选项,例如,只有 ChoiceA 可以被用户 select 使用,而在其他情况下,只有 ChoiceB ]?

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

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(...))