Я использую Django 3.0.5 и хочу загрузить изображения в Django admin.
Я пытаюсь:
1) изменить имя файла загруженной папки мультимедиа на основе данных изображения.
2) Пропустить поля в отображаемой форме, поскольку они автоматически сгенерировано.
Модель зарегистрирована в admin.py
Это мой код в models.py:
from django.db import models
from hashlib import md5
from PIL import Image
from io import BytesIO
class NewImage(models.Model):
image_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='')
image_hash = models.CharField(max_length=50, null=False, unique=True, db_column='hash', default='')
def __str__(self):
return self.image_name
@staticmethod
def hash_exists(hash):
return NewImage.objects.filter(image_hash=hash).exists()
def generate_name(self):
try:
img_id = NewImage.objects.values('id').order_by('-id').first()['id'] + 1
except:
img_id = 1
self.image_name = "%s_%s" % (img_id, self.image_hash[-4:])
def save(self, *args, **kwargs):
img = Image.open(self.image)
self.image_hash = md5(img.tobytes()).hexdigest()
if not self.pk:
try:
if self.hash_exists(self.image_hash):
raise ValueError("image hash already exists, duplicate image!")
except ValueError as err:
print(err.args)
return ""
self.width, self.height = img.size
self.extension = img.format.lower()
self.generate_name()
super(NewImage, self).save(*args, **kwargs)
1) Как я могу получить файл в папка мультимедиа будет image_name
2) Для пропуска полей. Основываясь на ответах SOF, я попробовал следующее (это не работает) в forms.py:
from django import forms
from django.contrib import admin
from .models import NewImage
class NewImageForm(forms.ModelForm):
class Meta:
model = NewImage
exclude = ['image_name','height','width','extension','image_hash']
class NewImageAdmin(admin.ModelAdmin):
exclude = ['image_name','height','width','extension','image_hash']
form = NewImageForm