У меня есть модель Django, которая сохраняет изображение. Однако прежде чем сохранить модель, я хочу проверить ширину и высоту и создать md5 га sh изображения для проверки на наличие дублирующих загрузок.
Я не использую никаких пользовательских форм, я просто пытаюсь чтобы загрузить некоторые изображения с помощью административного сервера.
Я использую Django == 3.0.5 и Python 3.8.2
Это моя модель:
from django.db import models
from hashlib import md5
from PIL import Image
from io import BytesIO
class UploadedImage(models.Model):
"""An image upload
Arguments:
models {[type]} -- [description]
"""
name = models.CharField(max_length=255, default='')
pub_date = models.DateTimeField(auto_now=True)
image = models.ImageField(upload_to='images/')
height = models.IntegerField(default=0)
width = models.IntegerField(default=0)
extension = models.CharField(max_length=20, null=False, default='')
hash = models.CharField(max_length=50, null=False, unique=True, db_column='hash', default='')
def __str__(self):
return self.name
@staticmethod
def hash_exists(hash):
return UploadedImage.objects.exists(hash=hash)
def generate_name(self):
img_id = UploadedImage.objects.values('id').order_by('-id').first()['id'] + 1
self.name = "%s_%s" % (img_id, self.hash[-4:])
def save(self, *args, **kwargs):
# get the actual image???????
# img = self.request.FILES['image'] ????
if img:
self.hash = md5(img).hexdigest()
try:
if hash_exists(self.hash):
raise ValueError("image hash already exists, duplicate image!")
except ValueError as err:
print(err.args)
return err
img = Image.open(BytesIO(img))
self.width, self.height = img.size
self.extension = img.format.lower()
self.generate_name()
else:
print("no image")
return ""
super(UploadedImage, self).save(*args, **kwargs)
Однако я нигде не могу найти, как я могу получить доступ к файлам, которые отправляются в форме. Как я могу получить к ним доступ?