次のモデルがあるとします
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
?
回答:
回答№1は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(...))