【发布时间】:2011-08-05 16:59:43
【问题描述】:
我正在尝试创建一个对话框,该对话框使用 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 中呈现时,它不会像我一样抓取任何初始数据会期望。有什么特别的技巧可以让它工作吗?我已经搜索了文档(似乎缺少基于泛型的类视图的示例)和源代码,但我看不出我缺少什么。
【问题讨论】:
标签: django-forms django-views django-class-based-views