首页 > 解决方案 > How to save user input in database from django form

问题描述

I hava created a small project in django where i have created a form and with 3 fields now i want if user type his name , email and invite message then it should save in databse.

i am unable to save the data in database.

form.py

from datetime import datetime
from bootstrap_datepicker_plus import DatePickerInput
from django.contrib.admin.widgets import AdminDateWidget
from bootstrap_datepicker_plus import DateTimePickerInput
from bootstrap_datepicker_plus import TimePickerInput

# from .models import check


class Email_app(forms.Form):
    Name = forms.CharField()
    Email = forms.EmailField()
    Invite = forms.CharField()
    start_date = forms.DateField(label="Start_Date", widget=DatePickerInput())
    start_time = forms.DateField(label="Start_Time", widget=TimePickerInput())
    end_date = forms.DateField(label="End_Date", widget=DatePickerInput())
    end_time = forms.DateField(label="End_Time", widget=TimePickerInput()) 
    
    
    def __str__(self):
        return self.Name

Form > enter image description here

below is the view.py

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import  formatdate
# from email import encoders
from email.encoders import encode_base64
import os,datetime
COMMASPACE = ', '
# from django.shortcuts import render

# Create your views here.
from django.shortcuts import render
from operators.settings import EMAIL_HOST_USER
from . import forms
from django.core.mail import send_mail
# Create your views here.
#DataFlair #Send Email
def email_app(request):
    sub = forms.Email_app()
    if request.method == 'POST':
        sub = forms.Email_app(request.POST)
        subject = 'Welcome to Email Event'
        message = 'Hope you are enjoying your Django'
        recepient = str(sub['Email'].value())
        invite = str(sub['Invite'].value())
        start_date = str(sub['start_date'].value())
        start_time = str(sub['start_time'].value())
        end_date = str(sub['end_date'].value())
        end_time = str(sub['end_time'].value())
        send_mail(subject, 
            message, EMAIL_HOST_USER, [recepient], fail_silently = False)
        print(start_date)
        print(end_date)
        send_mail1(recepient,invite)
        return render(request, 'Email_app/success.html', {'recepient': recepient})
    return render(request, 'Email_app/index.html', {'form':sub})

i am taking the input as well in view.py but i need help to save the same input from user in database. Though it is easy to save from model.py but i am working on form. So is there any way to save the inputs in database from form.py.

标签: pythondjango

解决方案


我现在假设你应该已经想出了一个解决方案,但无论如何......

为了保存到您的数据库中,因为您已经form.py定义了您只需要form.save()在您的视图中调用。

在你的views.py

def email_app(request):
    if request.method == 'POST':
       form = Email_app(request.POST)
       # Do Something
       form.save() #<-- saving the form to the database
       return render(request, 'Email_app/success.html', {'recepient': recepient})

    else:
      form = Email_app()
    return render(request, 'Email_app/success.html', {'recepient': recepient})

我建议您将表单命名为:EmailForm()为了避免代码中的任何冲突和不必要的错误


推荐阅读