Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django中混合细节视图和表单的问题_Python_Django_Mixins_Detailsview - Fatal编程技术网

Python django中混合细节视图和表单的问题

Python django中混合细节视图和表单的问题,python,django,mixins,detailsview,Python,Django,Mixins,Detailsview,我正试图用Django为我的应用程序的博客部分创建一个评论系统。我尝试将我的细节视图与表单mixin混合在一起,我有点挣扎。提交表单时,它不会保存,也不会出现错误。如果你们中有人能帮忙,我将不胜感激 这是我的看法 class DetailPostView(FormMixin, DetailView): model = Post template_name = "blog/post_detail.html" context_object_name = &

我正试图用Django为我的应用程序的博客部分创建一个评论系统。我尝试将我的细节视图与表单mixin混合在一起,我有点挣扎。提交表单时,它不会保存,也不会出现错误。如果你们中有人能帮忙,我将不胜感激

这是我的看法

class DetailPostView(FormMixin, DetailView):
    model = Post
    template_name = "blog/post_detail.html"
    context_object_name = "posts"
    form_class = CommentForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["form"] = CommentForm
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def get_success_url(self):
        return reverse("post-detail", kwargs={"pk": self.object.pk})
模型

class Comment(models.Model):
    comment = models.ForeignKey(Post, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.CharField(max_length=50)
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-created_on"]

    def __str__(self):
        return self.title

发生这种情况的原因是,您构造了一个传递给上下文数据的新表单,因此它不会呈现任何错误,因为您构造了一个表单而没有验证请求数据并呈现该表单,因此您不会显示首先拒绝数据的表单

但你不需要这样做。Django已经处理好了。因此,您不应覆盖

另一个问题是您没有保存表单,您可以重写
form\u valid
方法,也可以从中继承

最后,最好先创建表单,然后分配
self.object
,否则它会将其作为实例传递给表单:

from django.views.generic.edit import ModelFormMixin

class DetailPostView(ModelFormMixin, DetailView):
    model = Post
    template_name = 'blog/post_detail.html'
    context_object_name = 'posts'
    form_class = CommentForm

    # no get_context_data override

    def post(self, request, *args, **kwargs):
        # first construct the form to avoid using it as instance
        form = self.get_form()
        self.object = self.get_object()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def get_success_url(self):
        return reverse('post-detail', kwargs={'pk': self.object.pk})
来自django.views.generic.edit导入模型formmixin的

类DetailPostView(ModelFormMixin,DetailView):
型号=员额
模板名称='blog/post\u detail.html'
上下文\对象\名称='posts'
form_class=CommentForm
#无获取上下文数据覆盖
def post(自我、请求、*args、**kwargs):
#首先构造表单以避免将其用作实例
form=self.get\u form()
self.object=self.get_object()
如果form.is_有效():
返回self.form\u有效(form)
其他:
返回自我。表单_无效(表单)
def get_success_url(自我):

return reverse('post-detail',kwargs={'pk':self.object.pk})
谢谢你,Willem,我编辑了我的视图以反映你在这里描述的内容。但当检查到我的Django管理门户时。注释尚未保存。@KevinHudgens:没有,但这是因为表单无效。但您只是用一个新的“覆盖”了该表单,因此它不会在模板中呈现错误。e@KevinHudgens
FormMixin
不保存对象。您必须覆盖
表单\u valid
。或者最好使用
modelformixin
。再次感谢。我将研究您建议的两种保存表单的方法。感谢您在这个问题上的帮助和我以前在Django的帖子。@KevinHudgens:aarrrgghhh。。。我不知何故把它误读为
modelformixin
。更新。