我正在尝试显示一个表单,并在我的基于类的视图的帖子中进行分析。 用于显示表单的代码是 (不,我没有使用django'形式,因为它打破了我的设计,我赶紧:() 我的表单代码如下:
<form action="." method="POST" >
<input type='hidden' name='pf_id' value='{{pf.id}}' />
<input type='hidden' name='content_type' value='portfolio' />
<textarea id="id_comment" name="comment"></textarea>
<section><input type="submit" value="submit" name="commentSubmit" class="comment-button" title="submit" class="comment-button" /></section>
</form>
在我的 views.py :
中class ProjectDetailView(FormMixin, DetailView):
template_name = 'account/inner-profile-page.html'
model = ProjectDetail
context_object_name = 'project'
def get_object(self, queryset=None):
return get_object_or_404(ProjectDetail, title_slug = self.kwargs['title_slug'])
def get_context_data(self, **kwargs):
context = super(ProjectDetailView, self).get_context_data(**kwargs)
projects = []
for st in SubType.objects.all():
user = self.get_object().user
pd = ProjectDetail.objects.filter(user=user,project_sub_type__sub_type=st)
if pd.count() > 0:
projects.append((st.name, pd.count()))
context['projects'] = projects
return context
def post(self, request, *args, **kwargs):
import pdb;pdb.set_trace()
我期待在提交表单时调用post方法(希望我在我的假设中是正确的),但它没有,因为提交此表单会将我带到一个空白页面,url不会更改,我会得到405我的runserver shell中的错误消息。为什么会发生这种情况? 我的网址是这样的:
url(r'^project-detail/(?P<title_slug>\w+)/$',ProjectDetailView.as_view(), name="project-detail-view"),
url(r'^project-page/(?P<user_slug>.+)/$',projectPage.as_view(),name='projectPage'),
答案 0 :(得分:1)
我想问题出在您的观点上。由于您继承了FormMixin和DetailView,它们都没有实现POST方法,因此django返回405错误代码。尝试继承updateview或createview以支持帖子功能。
答案 1 :(得分:0)
对于那些不想使用 CreateView
因为他们不处理创建模型对象而只想使用 TemplateView
和 FormMixin
来管理与实际模型,您需要了解这种组合没有POST
方法实现。
我真的想通过 CBV 实现这一点,您必须将表单定义如下:
class ProjectDetailView(FormMixin, DetailView, ProcessFormView):
#Your code here
def form_valid(self, form):
return super().form_valid(form)
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
然后您可以使用 post
或 form_valid
方法来管理提交操作。
诀窍是 ProcessFormView
允许您在视图中使用 POST
方法。