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