清理 request.POST 个对象并检查它是否有效

Clean request.POST object and checking if it is valid

我在 HTML 中有以下表格:

<form method="POST">
    {% csrf_token %}
    <button type='submit' name='manager_approve' value='{{ leave.leave_id }}' class='btn btn-success btn-md'>Approve</button>
</form>

我正在按以下方式处理此请求:

class ProcessLeaveRequest(TemplateView):
    template_name = 'LMSAdmin/process_leave_request.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, {'leave_requests': GetLeaves.process_results(request)})

    def post(self, request):

        if 'manager_approve' in request.POST:
            leave = Leaves.objects.get(id=request.POST['manager_approve'])

        return redirect('process_leave_request')

有没有办法在 request.POST['manager_approve'] 上实现 form class 的 运行 is_valid()cleaned_data() 功能而不创建 form 对象?

不,is_valid()cleaned_dataForm 对象的 methods/properties,因此您必须创建一个表单。

但是,如果您有一个模型,您可以创建该模型的一个实例,然后 运行 clean() 来检查属性是否有效,尽管我认为这不符合您的使用case 因为你只传递了一个 id。

由于您的用例非常简单,如果没有传递 id 的 Leaves 对象,您可以通过捕获异常来避免 Form 事情:

try: 
    leave = Leaves.objects.get(id=request.POST['manager_approve'])
except (Leaves.DoesNotExist, ValueError, TypeError):
    # ValueError will be raised if id cannot be cast to int
    # TypeError will be raised if id is of wrong type
    raise Http404