【发布时间】:2017-05-30 12:19:03
【问题描述】:
我正在尝试在通用 DetailView 中创建模式表单,用户可以在其中让我了解与该特定对象相关的错误。提交表单后,用户应该返回到同一页面(相同的 DetailView),但我无法弄清楚如何将主键传递给 FormView 的 success_url。
views.py:
class ErrorView(AjaxTemplateMixin, FormView):
form_class = ErrorForm
template_name = 'app/error.html'
def get_success_url(self, **kwargs):
return reverse_lazy('feriehus_detail', kwargs={'pk': self.object.pk})
def form_valid(self, form):
form_content = form.cleaned_data['content']
template = get_template('error_template.txt')
context = Context({
'form_content': form_content
})
content = template.render(context)
email = EmailMessage(
'Fejl',
content,
'Your website ' + '',
['youremail@gmail.com']
)
email.send()
return super(ErrorView, self).form_valid(form)
class FeriehusDetail(DetailView):
model = Feriehus
def get_context_data(self, **kwargs):
context = super(FeriehusDetail, self).get_context_data(**kwargs)
context['price_data'] = CreateContext.price_time_serie(pk=self.kwargs['pk'])
return context
urls.py:
url(r'^error/$', views.ErrorView.as_view(), name='error'),
url(r'^feriehus/(?P<pk>[0-9]+)/$', views.FeriehusDetail.as_view(), name='feriehus_detail'),
这部分不起作用:
kwargs={'pk': self.object.pk})
【问题讨论】:
-
首先这是一个视图,而不是一个表单,所以它应该在views.py中。但是您根本没有任何定义对象的东西:您不会从了解对象的视图继承,只是形式;并且您无需在 form_valid 上执行任何操作来通过保存表单来创建对象。所以我不知道你指的是什么对象。
-
谢谢!那是一个错字。现在已经修好了。使用
<a data-toggle="modal" href="{% url 'error' %}" data-target="#form-modal" class="btn border-white btn-lg"> Fejl i data?</a>将表单插入到detailview 模板中。detailview 正在描述一个对象,我希望success_url 返回到同一页面。我希望它现在更有意义。
标签: django django-forms django-views