フォームからのメール送信でモデルに登録しているemailアドレスへ送りたい
detailviewで入力された内容をmodelに登録されたemailへ送信したいのですが、メールアドレスの取得方法がわかりません。
detailviewないでのmodelの扱いいついて根本理解ができていないことが原因ですが、ご教示いただければと思います。
python
1(views.py) 2 3class Order(DetailView, FormView): 4 """商品注文""" 5 queryset = Register.objects.all() 6 template_name = 'order.html' 7 form_class = OrderForm 8 9 def get_context_data(self, **kwargs): 10 context = super().get_context_data(**kwargs) 11 context['form'] = OrderForm(initial={'TestText': Register.objects.get(pk=self.kwargs.get('pk'))}) 12 # context['shop'] = OrderForm(initial={'TestEmail': Register.objects.get(pk=self.kwargs.get('email'))}) 13 return context 14 15 def form_valid(self, form): 16 form.send_email() 17 return super().form_valid(form) 18 19
python
1(forms.py) 2 3 def send_email(self): 4 subject = 'order' 5 context = { 6 'TestText': self.cleaned_data['TestText'], 7 'customer_name': self.cleaned_data['customer_name'], 8 'customer_tel': self.cleaned_data['customer_tel'], 9 'customer_mail': self.cleaned_data['customer_email'], 10 'select_name': self.cleaned_data['select_name'], 11 'select_hour': self.cleaned_data['select_hour'], 12 } 13 message = render_to_string('testtemplate/test.txt', context) 14 name = self.cleaned_data['customer_name'] 15 email = self.cleaned_data['customer_email'] 16 from_email = '{name} <{email}>'.format(name=name, email=email) 17 recipient_list = [{{register.email}}] 18 try: 19 send_mail(subject, message, from_email, recipient_list) 20 except BadHeaderError: 21 return HttpResponse("無効なヘッダが検出されました。") 22
recipient_listに任意のメールを記入するとコンソール上ではで送信確認できています。
python
1(urls.py) 2urlpatterns = [ 3 path('thanks/', views.Thanks.as_view(), name='thanks'), 4 path('create/', views.Create.as_view(), name='create'), 5 path('list/', views.ShopList.as_view(), name='list'), 6 path('order/<int:pk>/', views.Order.as_view(), name='order'), 7 path('result/', views.OrderResult.as_view(), name='order_result'), 8 path('order_confirm_detail/<int:pk>/', views.OrderConfirm.as_view(), name='order_confirm'), 9 path('testview/', views.testview, name='testview') 10] 11
python
1(models.py) 2 3class Register(models.Model): 4 """店舗登録モデル""" 5 class Meta: 6 db_table = 'shop' 7 verbose_name_plural = '店舗登録' 8 9 name = models.CharField(verbose_name='店舗名', max_length=50) # 店舗名 10 email = models.EmailField(max_length=256, unique=True) # メールアドレス 11 tel = models.CharField(max_length=14) # 電話番号HPには公開しない 12 address = models.TextField(verbose_name='住所', null=True, blank=True) 13 text = models.TextField(max_length=256) # 店舗紹介文 14 item = models.ImageField(verbose_name='商品画像', upload_to='item_img') # 商品画像 15 shop = models.ImageField(verbose_name='店舗画像', upload_to='shop_img') # 店主画像 16 delivery1 = models.CharField(verbose_name='受け取り1', max_length=12, null=True, blank=True) # 受取1 17 delivery2 = models.CharField(verbose_name='受け取り2', max_length=12, null=True, blank=True) # 受取2 18 delivery3 = models.CharField(verbose_name='受け取り3', max_length=12, null=True, blank=True) # 受取3 19 price = models.IntegerField(default=750, null=True, blank=True) # 価格将来的に利用 20 created = models.DateTimeField(auto_now_add=True) # 登録日 21 saved = models.DateTimeField(auto_now=True) # 更新日 22 23 def __str__(self): 24 return self.name 25
###補足情報
python3.6
django2.2.1
よろしくお願いいたします。
HTML
1<form action="" method="POST"> 2 <div align="center" style="margin-top: 10px"> 3 4 {% csrf_token %} 5 6 <p>{{ form.TestText.as_hidden }}</p> 7 <p>注文数:{{form.select_name}}個 </p> 8 <p>受取時間:{{form.select_hour}}</p> 9 <p>お名前:{{form.customer_name}}</p> 10 <p>電話番号:{{form.customer_tel}}</p> 11 <p>メールアドレス:{{form.customer_email}}</p> 12 <button type="submit" class="btn btn-warning rounded-pill" style="margin: 5px;">この内容で注文する</button> 13 </div> 14 </form> 15
送信フォームも見せてください
回答1件
あなたの回答
tips
プレビュー