2017-10-08 1 views
0

連絡先フォームの入力からデータを取り込むときに、save()をDjango SQLite DBメソッドに正しく実装する方法は?最後のメソッドは入力を保存しようとしますが、それは機能しません。 Djangoの連絡フォームで電子メールを送信するチュートリアルのコードを使用しました。データベース機能に保存を追加する必要があります。連絡先フォームからDjango SQLite DBにsave()入力データメソッドを正しく実装する方法は?

from django.core.mail import send_mail, BadHeaderError 
from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render, redirect 
from .forms import ContactForm 
from .models import SendEmail 

def email(request): 
    if request.method == 'GET': 
     form = ContactForm() 
    else: 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      from_email = form.cleaned_data['from_email'] 
      message = form.cleaned_data['message'] 

      try: 
       send_mail(
        subject, message, from_email, 
        ['[email protected]'] 
       ) 
       return redirect('success') 
      except BadHeaderError: 
       return HttpResponse('Invalid header found.') 

      return render(request, "email.html", {'form': form}) 

def success(request): 
    return HttpResponse('All right! Thank you for your message.') 

def savedata(request): # want to save data input into the SQLIte database!! here is something wrong 
    if request.method == 'GET': 
     form = ContactForm() 
    else: 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      from_email = form.cleaned_data['from_email'] 
      message = form.cleaned_data['message'] 
      message_object = SendEmail(
       from_email=from_email, subject=subject, message=message) 

      message_object.save() 

      return HttpResponseRedirect('success') # else: form = ContactForm() # unbound form 
    return render(request, "email.html", {'form': form}) 

テンプレート

<h1>Submit identifier for the data processing</h1> 
<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <div class="form-actions"> 
    <button type="submit">Send</button> 
    </div> 
</form> 

形態

from django import forms 

class ContactForm(forms.Form): 
    from_email = forms.EmailField(required=True) 
    subject = forms.CharField(required=True) 
    message = forms.CharField(widget=forms.Textarea, required=True) 

モデル

from django.db import models 

class SendEmail(models.Model): 
    from_email = models.EmailField() 
    subject = models.TextField() 
    mesage = models.TextField() 
+0

フォームが有効な場合、 'if form.is_valid()'メソッドでviews.pyに 'form.save()'を追加できます – hansTheFranz

答えて

0

単純なFormを使用したい場合は、あなたのアプローチは悪くありません。あなたがあなたのviews.pyから保存ロジックを移行する場合は、あなたのforms.py/models.pyあなたがModelFormを使用する必要がありますし、@hansTheFranzがコメントとして、あなたのインスタンス化のフォームから.save()methodを使用することができます。

関連する問題