CreateView に値が設定された読み取り専用フィールドを持たせようとしていますが、それを機能させることができません。
別のモデルへの ForeignKey を持つモデルがあります。
class CompanyNote(TimeStampedModel):
company = models.ForeignKey(Company)
note = models.TextField(blank=True)
そして、私はCreateViewを持っています:
class CompanyNoteCreateView(CreateView):
model = models.CompanyNote
form_class = CompanyNoteForm
カスタム ModelForm を使用します。
class CompanyNoteForm(forms.ModelForm):
company = forms.ChoiceField(
widget=forms.widgets.Select(attrs={'readonly': 'readonly'}))
class Meta:
model = models.CompanyNote
ご覧のとおり、問題のフィールドのウィジェットは読み取り専用です。これは、 のように URL の一部として会社を取り上げているためですcompany/1/note/add
。「1」を拾って適切な会社オブジェクトを見つけるのに問題はありませんが、読み取り専用フィールドを設定する方法がわかりません。
私は試した:
def get_initial(self):
initial = super(CompanyNoteCreateView, self).get_initial()
initial['company'] = self.get_company().id
return initial
しかし、それはうまくいきませんでした。ウィジェットが空です。これが問題である可能性があります。おそらく、私はここで間違ったツリーを吠えています。どんなアイデアでも大歓迎です。