Django管理站点未反映表单中的数据

时间:2018-08-13 10:49:26

标签: django admin

我希望用户在我的数据库中输入数据,以便管理员可以拥有请求休假的用户列表。

以下是我的脚本。

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)

4 个答案:

答案 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()
相关问题