FileField .full_clean()使我的应用程序表现异常

时间:2019-07-18 11:38:43

标签: python django

我在模型中使用FileField。我已经添加了一个验证器,并且我正在运行.full_clean(),所以它已经运行了。我每次都会收到此错误:

{'CV': ['This field cannot be blank.']}
C:\Users\PC\Desktop\bestVENV\myvenv\bestWEB\oferte\views.py in incarcarecv
            cv_upload.full_clean() 

文件大小超出限制,因此没有上传。 奇怪的是,文件大小没有超出限制,因此它应该可以工作,但是我不明白为什么它不起作用。

views.py

from django.shortcuts import render, get_object_or_404
from .models import Oferta, CV
from django.contrib import messages
from django.core.paginator import Paginator

# Create your views here.
def incarcarecv(req):
    context = {
        'title': "Incarcare CV | Best DAVNIC73"
    }
    if req.method == 'POST':
        nume = req.POST['nume']
        prenume = req.POST['prenume']
        telefon = req.POST['telefon']
        email = req.POST['email']
        cv = req.FILES['CV']
        if(req.user.is_authenticated):
            cv_upload = CV(
            solicitant=req.user,
            nume=nume,
            prenume=prenume,
            telefon=telefon,
            emailContact=email
            )
            cv_upload.full_clean()
            cv_upload.CV.save(cv.name, cv)
            cv_upload.save()
            req.user.profile.cvuri.append(cv_upload.id)
            req.user.profile.save()
            messages.success(req, 'CV depus cu succes!')
        else:
            messages.error(req, 'Trebuie sa fii logat pentru a depune CV-ul!')
    return render(req, "../templates/pagini/incarcare-cv.html", context)

validators.py

from django.core.exceptions import ValidationError


def validate_file_size(value):
    filesize=value.size

    if filesize > 99999999999:
        raise ValidationError("Fisierul poate avea maxim 5MB!")
    else:
        return value

models.py

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

# Create your models here.
class CV(models.Model):
    solicitant = models.ForeignKey(User, on_delete=models.CASCADE)
    dataUploadCV = models.DateField(auto_now_add=True)
    nume = models.CharField(max_length=12)
    prenume = models.CharField(max_length=12)
    telefon = models.CharField(max_length=12)
    emailContact = models.EmailField(max_length=40)
    CV = models.FileField(upload_to='documents/%d/%m/%Y', validators=[validate_file_size])
    rezolvata = models.BooleanField(default=False)
    def __str__(self):
        return self.nume + " " + self.prenume + ": " + str(self.CV)

html

{% extends 'base.html' %}
{% load static %}
{% block content %}
            <div class="container container-centru">
                <h1 class="heading-contact">Incarca CV</h1>
                {% include 'partials/_alerts.html' %}
                <form action="{% url 'incarcarecv' %}" method="POST" class="form-contact"  enctype="multipart/form-data">
                    {% csrf_token %}
                        <div class="form-group">
                            <label for="inputnume" class="email-contact">Nume</label>
                            <input type="text" name="nume" class="form-control" id="inputnume" aria-describedby="numeHelp" placeholder="Introdu nume">
                        </div>
                        <div class="form-group">
                                <label for="inputprenume" class="email-contact">Prenume</label>
                                <input type="text" name="prenume" class="form-control" id="inputprenume" aria-describedby="prenumeHelp" placeholder="Introdu prenume">
                        </div>
                        <div class="form-group">
                            <label for="inputtelefon" class="email-contact">Telefon</label>
                            <input type="text" name="telefon" class="form-control" id="inputtelefon" aria-describedby="telefonHelp" placeholder="Introdu telefon">
                        </div>
                        <div class="form-group">
                            <label for="inputemail" class="email-contact">Email</label>
                            <input type="email" name="email" class="form-control" id="inputemail" aria-describedby="emailHelp" placeholder="Introdu email">
                        </div>
                        <div class="form-group">
                                <label for="inputcv" class="email-contact">CV</label>
                                <input type="file" name="CV" accept=".docx,.doc,.pdf,application/msword" class="form-control" id="inputemail" aria-describedby="CVHelp">
                            </div>
                        <div class="form-group form-group-custom">
                                <input type="submit" value="Trimite" class="btn btn-secondary btn-block btn-login-custom">
                                <input type="submit" value="Resetează câmpurile" class="btn btn-secondary btn-block btn-reset-custom">
                        </div>                   
                </form>
            </div>
            <script src="{% static 'javascript/clearMessage.js' %}"></script>                  
{% endblock %}

我还发现一个奇怪的事情是,在上传表单时在验证器中添加打印语句不会打印任何内容,因此我认为代码没有运行。

我开始认为可能还会发生其他事情,导致我的代码无法正常工作。据我所知,.full_clean()运行多个验证器(如果我错了,请更正我),其中一些也来自django。我认为这些引发了错误。

您能向我解释为什么我的代码不起作用并帮助我修复它吗?我已经尝试解决这个问题了好几个小时,但是我似乎并不了解发生了什么。

0 个答案:

没有答案