gpt4 book ai didi

django-forms - 如何使用初始数据对 django 的通用 CreateView 进行子类化?

转载 作者:行者123 更新时间:2023-12-03 12:44:54 26 4
gpt4 key购买 nike

我正在尝试创建一个对话框,该对话框使用 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它没有像我期望的那样抓取任何初始数据。有什么特别的技巧可以让它工作吗?我已经搜索了文档(似乎缺少基于泛型的类 View 的示例)和源代码,但我看不出我缺少什么。

最佳答案

get_initial()应该只返回一个字典,而不是设置 self.initial .

您的方法应如下所示:

def get_initial(self):
# Get the initial dictionary from the superclass method
initial = super(YourView, self).get_initial()
# Copy the dictionary so we don't accidentally change a mutable dict
initial = initial.copy()
initial['user'] = self.request.user.pk
# etc...
return initial

关于django-forms - 如何使用初始数据对 django 的通用 CreateView 进行子类化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com