使用DJango DetailView发布请求错误'MyView'对象没有属性'object'

n.i*_*imp 4 django django-forms django-views

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

但在这里我得到的错误

'Detail' object has no attribute 'object'
Run Code Online (Sandbox Code Playgroud)

我试图在上下文实例中分配对象,也使用self.但没有任何作用.

Sar*_*mad 10

你在这里缺少的是你必须在调用之前将对象分配给类或self get_context_data().

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():
        # Write Your Logic here

        self.object = self.get_object()
        context = context = super(Detail, self).get_context_data(**kwargs)
        context['form'] = DetailForm
        return self.render_to_response(context=context)

    else:
        self.object = self.get_object()
        context = super(Detail, self).get_context_data(**kwargs)
        context['form'] = form
        return self.render_to_response( context=context)
Run Code Online (Sandbox Code Playgroud)

并在render_to_response()刚刚传递上下文.没有其他论据.

希望它能为你效劳.


小智 5

这就是我实现 Safrazs 答案中的代码以在我的问题模型上做出回复选项的方式。我知道这是一个老问题,但我希望有人会发现这很有用。

class QuestionDetailView(generic.DetailView):
    model = Question
    template_name = 'forum/question.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = ReplyForm

        return context

    def post(self, request, *args, **kwargs):
        form = ReplyForm(request.POST)

        if form.is_valid():
            reply = form.save(commit=False)
            reply.creator = request.user
            reply.question = self.get_object()
            reply.save()
            self.object = self.get_object()
            context = context = super().get_context_data(**kwargs)
            context['form'] = ReplyForm

            return self.render_to_response(context=context)

        else:
            self.object = self.get_object()
            context = super().get_context_data(**kwargs)
            context['form'] = form

            return self.render_to_response(context=context)
Run Code Online (Sandbox Code Playgroud)