我希望用户在我的数据库中输入数据,以便管理员可以拥有请求休假的用户列表。
以下是我的脚本。
models.py
from django.db import models
from django.contrib.auth.models import User
class Leave(models.Model):
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)
from_date = models.DateField()
to_date = models.DateField()
reason = models.CharField(max_length= 180)
我不确定如何从此处将表单保存到数据库。 views.py
from .forms import LeaveRequestForm
from django.shortcuts import render, redirect
from django.views.generic import TemplateView
class LeaveRequestView(TemplateView):
template_name = 'lrequests/request_form.html'
def get(self, request):
form = LeaveRequestForm()
return render(request, self.template_name, {'form':form})
def post(self, request):
form = LeaveRequestForm(request.POST or None)
context = {
'form':form
}
if form.is_valid():
form.save()
name = form.cleaned_data['name']
employee_id = form.cleaned_data['employee_id']
dept = form.cleaned_data['department']
desg = form.cleaned_data['designation']
rpt_mgr = form.cleaned_data['reporting_manager']
tof = form.cleaned_data['department']
from_date = form.cleaned_data['from_date']
to_date = form.cleaned_data['to_date']
reason = form.cleaned_data['reason']
context.update({'name':name, 'employee_id':employee_id, 'dept':dept, 'desg':desg, 'rpt_mgr':rpt_mgr, 'tof':tof, 'from_date':from_date, 'to_date':to_date, 'reason':reason})
return render(request, self.template_name, context)
以下是我希望在表单中使用的字段。
forms.py
from django import forms
from .models import Leave
CHOICES = (('1','Earned Leave'),('2','Casual Leave'),('3','Sick Leave'),('4','Paid Leave'))
class LeaveRequestForm(forms.ModelForm):
name = forms.CharField(max_length = 50)
employee_id = forms.CharField(max_length = 20)
department = forms.CharField(label = 'Department ', required = True)
designation = forms.CharField(label = 'Designation ', required = True)
reporting_manager = forms.CharField(max_length = 20, required = True)
type_of_leave = forms.ChoiceField(choices=CHOICES, required = True)
from_date = forms.DateField(required = True)
to_date = forms.DateField(required = True)
reason = forms.CharField( required = True, max_length= 180)
class Meta:
model = Leave
fields = ('name',)
我也已经在管理员中注册了模型
admin.py
from django.contrib import admin
from . import models
admin.site.register(models.Leave)
答案 0 :(得分:0)
确保该表单是模型表单,然后在管理员中注册。如果它仍然没有显示,则可能有一些必填字段需要填写,而这些字段目前尚未填写,这妨碍了表单保存到数据库中
答案 1 :(得分:0)
您定义了一个表单,但是没有告诉Django在该模型的管理员中使用它。您需要定义一个ModelAdmin类并设置其form
attribute:
class LeaveAdmin(admin.ModelAdmin):
form = LeaveRequestForm
admin.site.register(models.Leave, LeaveAdmin)
答案 2 :(得分:0)
admin.py看起来不是这样的:
from django.contrib import admin
from . import models
@admin.register(models.Leave)
class LeaveAdmin(admin.ModelAdmin):
list_display = [ 'name', 'department', etc...]
答案 3 :(得分:0)
将您的views.py函数设为-
if request.method == "POST":
form = LeaveRequestForm(request.POST)
if form.is_valid():
leave = form.save(commit = False)
leave.user = request.user
form.save()