假设我有以下模型
class MyChoiceModel(models.Model):
mychoices = (('ChoiceA', 'ChoiceA'), ('ChoiceB', 'ChoiceB'))
和以下ModelForm
class MyChoiceModelForm(forms.ModelForm):
#...
class Meta:
model = MyChoiceModel
fields = ('mychoices', )
现在,用户可以选择所有类型的选择(ChoiceA
和ChoiceB
)。
我现在想要的是,某些选择值不会被显示出来。
如何过滤来自mychoices
的可用选项,例如,用户只能选择ChoiceA
,而在其他情况下,只能选择ChoiceB
?
答案 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(...))