Django 如何将CreateView中的表单(与detailview中的模型的泛型contenttype连接)获取到detailview中?

Django 如何将CreateView中的表单(与detailview中的模型的泛型contenttype连接)获取到detailview中?,django,Django,我在DetailView中尝试了FormMixins,得到了我的表单,但问题显然是它们不能有相同的视图,或者至少不能有相同的URL,那么这是如何工作的呢?我还尝试在类中使用post()函数 如何在同一页面上的多个位置管理所需的表单(最好使用内置的基于类的视图),并且仍然让表单接收详细模型的id 编辑:实际上我们在stack上有完全相同的例子,stack如何使答案/评论表单随处可见 Edit2:感谢Alasdair,我现在有了下面的代码,但是get error NOT NULL constrain

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

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

编辑:实际上我们在stack上有完全相同的例子,stack如何使答案/评论表单随处可见

Edit2:感谢Alasdair,我现在有了下面的代码,但是get error NOT NULL constraint failed publish\u answer.post\u 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/',PostDetailView.as_view(),name='postdetail'),
我在模型中得到了Post的绝对url,“postdetail”


为了补充我得到的答案,我想通知您,在使用
commit=False
保存表单后,您可以在
form\u方法中设置
post
created\u创建的
字段为valid
。有关更多信息,请参阅上的文档

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)
您可能希望使用,以便只有登录的用户才能访问该视图

from django.contrib.auth.mixins import LoginRequiredMixin

class PostDetailView(LoginRequiredMixin, FormMixin, DetailView):

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

上的文档可能会有所帮助,特别是该部分。@Alasdair非常感谢,我更新了代码和问题,但出现了一个错误。请显示您的
答案表单
,URL模式,还有完整的回溯。@Alasdair用answerform更新了,但当我在那里的字段中添加了“post”和“created_by”时,它们出现了,我手动选择了它们并保存了答案。我不知道如何在这种视图中自动执行此操作?“我对每一个建议都持开放态度,我这样做只是为了学习和拖延考试。”阿拉斯代尔现在更新了,对不起。我认为最后一步是自动填写帖子id并在类中按id创建。\u谢谢!您的文档链接和此答案非常有用!如果可以,我也会投票
from django.contrib.auth.mixins import LoginRequiredMixin

class PostDetailView(LoginRequiredMixin, FormMixin, DetailView):