一般的なDetailViewでモーダルフォームを作成しようとしていますが、その特定のオブジェクトに関連するエラーをユーザに知らせることができます。フォームが送信されると、ユーザーは同じページ(同じDetailView)に戻ることになっていますが、主キーをFormViewのsuccess_urlに渡す方法がわかりません。Django:DetailView pkをFormViewに渡す
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 ' + '',
['[email protected]']
)
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で何もしないでください。だから私はあなたが何を意味するかわからない。 –
ありがとう!それはタイプミスでした。今修正されました。フォームは ' Fejl i data?'を使用してdetailviewテンプレートに挿入されます。detailviewはオブジェクトを記述しており、success_urlを同じページに戻したいと考えています。私はそれが今より意味をなさないことを望む。 – Wessi