ユーザーが取引のステータスを変更できるはずであるが、は変更できないという特殊なケースがありますdeal_type
。したがって、ドロップダウンのウィジェットをテキストフィールドに変更すると思いました。
したがって、フォームセットでdeal_typeのウィジェットをオーバーライドしたいので、サブクラスBaseModelFormSet
化して、パラメーターとしてファクトリに渡しました。
deal_formset = modelformset_factory(Deal, formset=BaseDealFormSet, fields = {'status', 'deal_type'}, extra=0)
class Deal(models.Model):
deal_id = UUIDField()
status = models.ForeignKey(DealStatus)
deal_type = models.ForeignKey(DealType)
class BaseDealFormSet(BaseModelFormSet):
deal_type = forms.CharField(max_length=30, widget=forms.TextInput( attrs={'readonly': 'True'}))
def clean_deal_type(self):
return self.instance.deal_type
ただし、テンプレート{{fs.deal_type}}
では、ウィジェットはテキストフィールドではなくドロップダウンとして表示されます。
これが意図したとおりに機能するかどうか、つまり、ドロップダウンの選択された値がテキストフィールドとして表示されるかどうかさえわかりません。しかし、少なくともウィジェットの変更が表示されるはずですよね?しかし、それは完全に無視されているようです。
私は何が欠けていますか?ありがとう、