jquery の .load() 関数を使用してレンダリングされた django フォームを丸呑みするダイアログを作成しようとしています。.load 関数には、「alert」オブジェクトの pk が渡されます。また、クラス関数で利用できるのはself.request.user
、メッセージ モデル (models.py) で以下に示すように、これらのフィールドを事前に入力できるようにすることです。
class Message(models.Model):
user = models.ForeignKey(User)
alert = models.ForeignKey(Alert)
date = models.DateTimeField()
message = models.TextField()
django の CreateView をサブクラス化すると、ModelForm (views.py) のインスタンスを使用してコンテキストを簡単に生成できます。
class MessageDialogView(CreateView):
""" show html form fragment """
model = Message
template_name = "message.html"
def get_initial(self):
super(MessageDialogView, self).get_initial()
alert = Alert.objects.get(pk=self.request.POST.get("alert_id"))
user = self.request.user
self.initial = {"alert":alert.id, "user":user.id, "message":"test"}
return self.initial
def post(self, request, *args, **kwargs):
super(MessageDialogView, self).post(request, *args, **kwargs)
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(form=form)
return self.render_to_response(context)
ここでの問題はself.initial
、フォームでレンダリングされないことです。フォームが実際に呼び出しget_initial
ており、フォーム インスタンスが に適切な初期データを持っていることを確認post
しましたが、フォームがテンプレートmessage.html
でレンダリングされると、期待どおりに初期データが取得されません。これを機能させるための特別なトリックはありますか? ドキュメント (ジェネリック ベースのクラス ビューの例が不足しているようです) とソースを精査しましたが、何が欠けているのかわかりません。