我正在尝试使用django DetailView创建一个对象。我的代码就是这样。
class Detail(DetailView):
model = MyModel
template_name = 'mymodel_detail.html'
def get_context_data(self, **kwargs):
context = super(Detail, self).get_context_data(**kwargs)
context['form'] = DetailForm
return context
def post(self, request, *args, **kwargs):
form = DetailForm(request.POST, request.FILES)
if form.is_valid():
context['reply_form'] = DetailForm
self.object = super(Detail, self).get_object()
context['object'] = super(Detail, self).get_object()
return self.render_to_response(request=request, template=self.get_template_names(), context=context)
else:
context = context = super(Detail, self).get_context_data(**kwargs)
context['reply_form'] = form
self.object = super(Detail, self).get_object()
context['object'] = super(Detail, self).get_object()
return self.render_to_response(request=request, template=self.get_template_names(), context=context)
但在这里,我得到的错误,
'Detail' object has no attribute 'object'
我试着在上下文示例中分配对象,也用self。但都不管用。
4条答案
按热度按时间s6fujrry1#
在这里,您忽略了在调用
get_context_data()
之前必须将对象分配给类或self。在
render_to_response()
中,只需传递上下文。没有其他论点。希望它能为你工作。
ut6juiuv2#
这就是我如何实现Safrazs answer的代码,以便在我的问题模型上创建一个回复选项。我知道这是一个老问题,但我希望有人会发现这是有用的。
z4bn682m3#
您从错误的泛型视图继承。你需要从
CreateView
继承,像这样:xa9qqrwz4#
你在错误的类上调用了
super
:应该是Detail
,而不是MessageDetail
。另外,您不需要表单代码。相反,使用一个通用的编辑视图(OpenView,DeleteView,FormView,UpdateView)。DetailView实际上仅用于显示目的。有关通用视图的更多详细信息,请访问http://ccbv.co.uk/