仅显示 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所有类型的选择(ChoiceA
和ChoiceB
)。
我现在想要的是某些选择值不会显示。
我如何从 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(...))
假设我有以下模型
class MyChoiceModel(models.Model):
mychoices = (('ChoiceA', 'ChoiceA'), ('ChoiceB', 'ChoiceB'))
和下面的ModelForm
class MyChoiceModelForm(forms.ModelForm):
#...
class Meta:
model = MyChoiceModel
fields = ('mychoices', )
现在,用户可以select所有类型的选择(ChoiceA
和ChoiceB
)。
我现在想要的是某些选择值不会显示。
我如何从 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(...))