表格未提交

时间:2018-10-01 07:18:56

标签: python django django-forms

一个小时前一切都很好,但是现在当我尝试将数据添加到表单并保存时正在运行exception部分 在调用post方法之前,该表单用于保存和重定向

但是我无法弄清楚为什么异常部分正在运行。 我什么都没改变 在控制台中,它给出了"POST /forum/topics/9/reply HTTP/1.1" 200 523

class NewPostView(generic.CreateView):
    form_class = NewPostForm
    template_name = 'forum/new_post.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        if 'pk' not in context:
            context['pk'] = self.kwargs['pk']

        return context

    def post(self, request, *args, **kwargs):
        topic = get_object_or_404(Topic, pk=self.kwargs['pk'])
        form = self.get_form()
        try:
            if form.is_valid():
                post = form.save(commit=False)
                post.topic = topic
                post.created_by = User.objects.get(pk=request.user.pk)
                post.save()
                return redirect('topic-detail', pk=topic.pk)

        except Exception as e:
            messages.warning(request, "Failed To Create. Error: {}".format(e))
            messages.warning(request, "Failed To Create Check Errors")
            args = {'form': form, 'pk': self.kwargs['pk']}
            #print(args)
            return render(request, self.template_name, args)

编辑:现在我可以看到User matching query does not exist.错误

Edit2:谢谢大家的答复。我发现了自己的错误,实际上是在使用自己的django.contrib.auth.user模型时在登录名中使用User。 当我在模型中更改created_by = models.ForeignKey("auth.User"),时,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

我的猜测是您不再登录该应用程序,因此request.user.pkNone

确保只有登录用户才能访问您的视图的最简单方法是添加LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin

class NewPostView(LoginRequiredMixin, generic.CreateView):

答案 1 :(得分:0)

我已经改变了您的观点。py

class NewPostView(View):
    .....add your template_name, form_class and get function....

def post(self, request, *args, **kwargs):
    topic = get_object_or_404(Topic, pk=self.kwargs['pk']) # here you can directly add pk=pk and def post(self, request, pk)
    form = self.form_class(request.POST)

    if form.is_valid():
       post = form.save(commit=False)
       post.topic = topic
       post.created_by = self.request.user
       post.save()
       return redirect('topic-detail', pk=topic.pk)
    else:
       messages.error(request, "Error Message")
       return render(request, self.template_name, {'form':form})

对于未登录的用户,您可以按照Daniel的回答和/或在您的模板中添加

{% if user.is_authenticated %}
 html
{% else %}
 html
{% endif %}