前提・実現したいこと
FormMixinとDetailViewのページから問い合わせを送りたいです。
問い合わせの送り先をDetailViewで指定したmodelが持つ属性のメールアドレスに送りたいのですが、うまくいきません。
発生している問題・エラーメッセージ
色々試してみたのですが、NameErrorやKeyErrorやAttributeErrorが出ています。
NameError name 'kwargs' is not defined KeyError 'store_id' AttributeError 'ApplicationForm' object has no attribute 'kwargs'
ApplicationFormの以下の箇所を
store = get_object_or_404(Store, pk=kwargs['store_id'])
以下に変更するとうまくいくので、
store = get_object_or_404(Store, pk=1)
ここを修正すればうまくいく気がしています。
該当のソースコード
models.py
class Store(models.Model): name = models.CharField(verbose_name='店舗名', max_length=100) recruitment_email = models.EmailField(verbose_name='メールアドレス', blank=True)
urls.py
path('store<int:store_id>/recruit/', RecruitDetailView.as_view(), name='recruit_detail'),
views.py
class RecruitDetailView(FormMixin, DetailView): queryset = Store.objects.all() pk_url_kwarg = 'store_id' form_class = ApplicationForm template_name = "app/store_recruit.html" def get_success_url(self): return resolve_url('app:index') def get_context_date(self, **kwargs): context = super().get_context_data(**kwargs) context['form'] = self.get_form() 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.send_email() return super(RecruitDetailView, self).form_valid(form)
forms.py
class ApplicationForm(forms.Form): name = forms.CharField(label='名前', max_length=100, widget=forms.TextInput(attrs={'class':'form-control'})) def send_email(self): name = self.cleaned_data['name'] context = { 'name': name, } subject = '応募がありました' mail_template = get_template('app/mail_template/contact/application.txt') message = mail_template.render(context) from_email = settings.DEFAULT_FROM_EMAIL store = get_object_or_404(Store, pk=kwargs['store_id']) store_mail = store.recruitment_email to = [settings.DEFAULT_FROM_EMAIL, store_mail] send_mail(subject, message, from_email, to)
試したこと
store = get_object_or_404(Store, pk=kwargs['store_id'])
の箇所を
store = get_object_or_404(Store, pk=self.kwargs['store_id']) store = get_object_or_404(Store, store_id=kwargs['store_id']) store = get_object_or_404(Store, store_id=self.kwargs['store_id'])
にしたり、
def send_email(self):
を
def send_email(self, **kwargs):
にしてみましたが、できませんでした。
お分かりになる方、何卒宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/19 07:41