如何将 CreateView 中的表单(与通用内容类型连接以在 detailview 中建模)进入 DetailView?

丘陵

我在 DetailView 中尝试使用 FormMixins 并获得了我的表单,但问题显然是它们根本不能具有相同的视图,或者至少不能具有相同的 URL,那么这是如何工作的呢?我还尝试在课堂上使用 post() 函数。

您将如何在同一页面的多个位置管理您需要的表单(最好使用内置的基于类的视图)并仍然让它接收详细模型的 id?

编辑:实际上我们在堆栈上有完全相同的示例,堆栈如何使到处都有答案/评论表单成为可能?

编辑 2:感谢 Alasdair,我现在有了以下代码,但得到错误 NOT NULL 约束失败 publish_answer.post_id

class PostDetailView(FormMixin, DetailView):
    model = Post
    form_class = AnswerForm
    template_name = 'main/postdetail.html'
    context_object_name = 'posts'

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context['form'] = AnswerForm(initial={'post': self.object})
        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 form_valid(self, form):
        form.save()
        return super(PostDetailView, self).form_valid(form)

答复表

class AnswerForm(forms.ModelForm):
    content = forms.CharField(widget=PagedownWidget())

    class Meta:
        model = Answer
        fields = ('content',)

网址

path('subject/<slug>', PostDetailView.as_view(), name='postdetail'),

我在 Post 模型中有 get_absolute_url,“postdetail”。

为了补充我得到的答案,我想通知您这个https://docs.djangoproject.com/en/2.0/topics/class-based-views/mixins/#an-alternative-better-solution

阿拉斯代尔

保存表单后,您可以方法中设置postcreated_by字段有关更多信息,请参阅模型表单保存方法上的文档form_validcommit=False

def form_valid(self, form):
    instance = form.save(commit=False)
    instance.created_by = self.request.user
    instance.post = self.object
    instance.save()
    return super(PostDetailView, self).form_valid(form)

您可能希望使用,LoginRequiredMixin以便只有登录用户才能访问该视图。

from django.contrib.auth.mixins import LoginRequiredMixin

class PostDetailView(LoginRequiredMixin, FormMixin, DetailView):

如果您希望所有用户都能够访问视图但只有登录用户能够提交表单,那么它会变得更加复杂。我将把它留给读者作为练习,但请注意,有关将 FormMixin 与 DetailView一起使用的文档最终决定创建一个单独的视图来处理发布请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档