Я пытаюсь создать форму с некоторыми данными и файлом, который необходимо загрузить.Я хочу ограничить размер файла до 5 МБ и не могу понять, как это сделать.
Я пытался использовать файл validators.py и запустить .validate () и .run_validators ()но я не заставил это работать.Я покажу вам некоторый код.
views.py
from django.shortcuts import render
from .models import Oferta, CV
from django.contrib import messages
# Create your views here.
def incarcareoferta(req):
context = {
'title': "Incarcare oferta de munca | Best DAVNIC73"
}
if req.method == 'POST':
try:
COR = req.POST['COR']
denumireMeserie = req.POST['denumireMeserie']
locuri = req.POST['numarLocuri']
agentEconomic = req.POST['agentEconomic']
adresa = req.POST['adresa']
dataExpirare = req.POST['expirareOferta']
experientaSolicitata = req.POST['experienta']
studiiSolicitate = req.POST['studii']
judet = req.POST['judet']
telefon = req.POST['telefon']
emailContact = req.POST['email']
cerere = Oferta(solicitant=req.user, cor=COR, denumireMeserie=denumireMeserie, locuri=locuri, agentEconomic=agentEconomic, adresa=adresa, dataExpirare=dataExpirare, experientaSolicitata=experientaSolicitata, studiiSolicitate=studiiSolicitate, judet=judet, telefon=telefon, emailContact=emailContact)
cerere.save()
except:
messages.error(req, 'Nu ai completat corect campurile sau unul din ele este liber!')
return render(req, "../templates/pagini/incarcare-oferta-de-munca.html", context)
def incarcarecv(req):
context = {
'title': "Incarcare CV | Best DAVNIC73"
}
if req.method == 'POST':
try:
nume = req.POST['nume']
prenume = req.POST['prenume']
telefon = req.POST['telefon']
email = req.POST['email']
cv = req.FILES['CV']
try:
cv_upload = CV(
solicitant=req.user,
nume=nume,
prenume=prenume,
telefon=telefon,
emailContact=email
)
CV.run_validators()
cv_upload.CV.save(cv.name, cv)
cv_upload.save()
except (ValueError):
messages.error(req, 'Formularul nu a fost incarcat!')
messages.info(req, 'Verifica daca esti logat, sau daca ai completat campurile corect!')
except:
messages.error(req, 'Formularul nu a fost incarcat. Ceva nu a functionat corect!')
except:
messages.error(req, 'Nu ai completat corect campurile sau unul din ele este liber!')
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 > 524288000:
print('too big')
raise ValidationError(_('Invalid value'), code='invalid')
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 Oferta(models.Model):
solicitant = models.ForeignKey(User, on_delete=models.CASCADE)
dataSolicitare = models.DateField(auto_now_add=True)
cor = models.CharField(max_length=12)
denumireMeserie = models.CharField(max_length=12)
locuri = models.IntegerField()
agentEconomic = models.CharField(max_length=50)
adresa = models.CharField(max_length=150)
dataExpirare = models.DateField()
experientaSolicitata = models.CharField(max_length=200)
studiiSolicitate = models.CharField(max_length=200)
judet = models.CharField(max_length=20)
telefon = models.CharField(max_length=12)
emailContact = models.EmailField(max_length=40)
rezolvata = models.BooleanField(default=False)
def __str__(self):
return self.cor
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)
Ноэто ничего не делает.Я также попытался
from django.shortcuts import render
from .models import Oferta, CV
from django.contrib import messages
# Create your views here.
def incarcareoferta(req):
context = {
'title': "Incarcare oferta de munca | Best DAVNIC73"
}
if req.method == 'POST':
try:
COR = req.POST['COR']
denumireMeserie = req.POST['denumireMeserie']
locuri = req.POST['numarLocuri']
agentEconomic = req.POST['agentEconomic']
adresa = req.POST['adresa']
dataExpirare = req.POST['expirareOferta']
experientaSolicitata = req.POST['experienta']
studiiSolicitate = req.POST['studii']
judet = req.POST['judet']
telefon = req.POST['telefon']
emailContact = req.POST['email']
cerere = Oferta(solicitant=req.user, cor=COR, denumireMeserie=denumireMeserie, locuri=locuri, agentEconomic=agentEconomic, adresa=adresa, dataExpirare=dataExpirare, experientaSolicitata=experientaSolicitata, studiiSolicitate=studiiSolicitate, judet=judet, telefon=telefon, emailContact=emailContact)
cerere.save()
except:
messages.error(req, 'Nu ai completat corect campurile sau unul din ele este liber!')
return render(req, "../templates/pagini/incarcare-oferta-de-munca.html", context)
def incarcarecv(req):
context = {
'title': "Incarcare CV | Best DAVNIC73"
}
if req.method == 'POST':
try:
nume = req.POST['nume']
prenume = req.POST['prenume']
telefon = req.POST['telefon']
email = req.POST['email']
cv = req.FILES['CV']
try:
cv_upload = CV(
solicitant=req.user,
nume=nume,
prenume=prenume,
telefon=telefon,
emailContact=email
)
cv_upload.CV.save(cv.name, cv)
cv_upload.save()
except (ValueError):
messages.error(req, 'Formularul nu a fost incarcat!')
messages.info(req, 'Verifica daca esti logat, sau daca ai completat campurile corect!')
except (invalid):
messages.error(req, 'File is too big!')
except:
messages.error(req, 'Formularul nu a fost incarcat. Ceva nu a functionat corect!')
except:
messages.error(req, 'Nu ai completat corect campurile sau unul din ele este liber!')
return render(req, "../templates/pagini/incarcare-cv.html", context)
Поскольку я думал, что ошибка будет из validators.py
Ничего не работает.
Так как я могу ограничить размер файла, используя этокод?Что я делаю не так прямо сейчас?Спасибо.