我该如何编码views.py,以便表单数据存储在数据库(/ admin)中?使用Django(v2)

时间:2018-08-14 09:51:01

标签: python django django-models django-forms django-views

这是用户/员工请假的项目,管理员可以查看。

models.py

from django.db import models
from django.contrib.auth.models import User

CHOICES = (('1','Earned Leave'),('2','Casual Leave'),('3','Sick Leave'),('4','Paid Leave'))

class Leave(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)
    name = models.CharField(max_length = 50)
    employee_ID = models.CharField(max_length = 20)
    department = models.CharField(max_length = 15)
    designation = models.CharField(max_length = 15)
    type_of_leave = models.CharField(max_length = 15, choices = CHOICES, default = None)
    from_date = models.DateField()
    to_date = models.DateField()
    reporting_manager = models.CharField(max_length = 50, default = None)
    reason = models.CharField(max_length= 180)


    def __str__(self):
        return self.name

forms.py

from django import forms
from lrequests import models

CHOICES = (('1','Earned Leave'),('2','Casual Leave'),('3','Sick Leave'),('4','Paid Leave'))

class LeaveRequestForm(forms.ModelForm): 

    class Meta:
        fields = ("name", "employee_ID", "department", "designation", "type_of_leave", "from_date", "to_date", "reporting_manager", "reason")
        model = models.Leave

admin.py

from django.contrib import admin
from . import models, forms


class LeaveAdmin(admin.ModelAdmin):
    form = forms.LeaveRequestForm

admin.site.register(models.Leave, LeaveAdmin)

在views.py文件中,我不确定如何编码将数据存储在 数据库。这样管理员可以查看从表单获取的数据。

views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import LeaveRequestForm
from django.views.generic import TemplateView


def leaveRequest(request):
    form_class = LeaveRequestForm
    if request.method == "POST":
        form = LeaveRequestForm(request.POST)
        if form.is_valid():
            leave = form.save(commit = False)
        return HttpResponse("Sucessfully submitted")
    else:
        return render(request, "request_form.html", {'form' : form_class})

这是我的模板。

{% extends "base.html" %}

{% block content %}
<div class="container">
    <h4>
        <form role="form", method="POST">
            {% csrf_token %}
            {{ form.as_p }}
            <button type = "submit">Submit</button>
        </form>
    </h4>
</div>
{% endblock %}

3 个答案:

答案 0 :(得分:0)

这是一个基本问题,但这是您应该做的

def leaveRequest(request):
    form_class = LeaveRequestForm
    if request.method=='POST':                  #executes when you submit the form
        form = LeaveRequestForm(request.POST)   #gets the form's data
        if form.is_valid():                     #checks if the data is valid
            lvreq = form.save()                 #saves the data
            return HttpResponse('Saved')
        else:
            return HttpResponse('invalid data entered') #error message
    return render(request, "request_form.html", {'form' : form_class})

答案 1 :(得分:0)

这是答案!

from django.shortcuts import render
from django.http import HttpResponse
from .forms import LeaveRequestForm

def leaveRequest(request):
    form_class = LeaveRequestForm
    if request.method == "POST":
        form = LeaveRequestForm(request.POST)
        if form.is_valid():
            leave = form.save(commit = False)
            leave.user = request.user
            form.save()
        return HttpResponse("Sucessfully submitted")
    else:
        form = LeaveRequestForm()
        return render(request, "request_form.html", {'form' : form_class})

答案 2 :(得分:0)

在forms.py和views.py中进行以下更改,您将获得所需的结果。 forms.py

from django import forms
from lrequests import models

CHOICES = (('1','Earned Leave'),('2','Casual Leave'),('3','Sick Leave'),('4','Paid Leave'))

class LeaveRequestForm(forms.ModelForm): 

    name = forms.CharField(max_length=30)
    employee_ID = forms.CharField(max_length=30)
    department = forms.CharField(max_length=30)
    designation = forms.CharField(max_length=15)
    type_of_leave = forms.CharField(max_length=15)
    from_date = forms.CharField(max_length=30)
    to_date = forms.CharField(max_length=30)
    reporting_manager = forms.CharField(max_length=30)
    reason = forms.CharFieldforms.CharField(max_length=200)    

    class Meta:
        fields = ("name", "employee_ID", "department", "designation", "type_of_leave", "from_date", "to_date", "reporting_manager", "reason")
        model = models.Leave

views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect 
from .forms import LeaveRequestForm
from django.views.generic import TemplateView
from .models import Leave

def leaveRequest(request):
    form_class = LeaveRequestForm
    if request.method == "POST":
        form = LeaveRequestForm(request.POST)
        if form.is_valid():
            leave = Leave(
                user = request.user
                name = request.POST.get('name','')
                employee_ID = request.POST.get('employee_ID','')
                department = request.POST.get('department','')
                designation = request.POST.get('designation','')
                type_of_leave = request.POST.get('type_of_leave','')
                from_date = request.POST.get('from_date','')
                to_date = request.POST.get('to_date','')
                reporting_manager =request.POST.get('reporting_time','')
                reason = request.POST.get('reason','')
            )
            leave.save()
        return HttpResponse("Sucessfully submitted")
   else:
        return render(request, "request_form.html", {'form' : form_class})