Всем доброго времени суток. Возникла проблема и никак не могу найти в чем она.
Суть проблемы:
1. Была статья, по которой был написан класс загрузки image как аватарок:
https://m.habr.com/ru/post/505946/
На базе статьи есть код:
import os
import uuid
from PIL import Image
from django.db import models
from utils.mixins import Uploader
def upload_to(instance, filename):
"""
:param instance: instance of UsersAvatars
:param filename: filename of the uploaded file by user
:return: returns new url to upload
"""
relative_path = instance.url_to_upload.rfind("media/") + len("media/")
return instance.url_to_upload[relative_path:]
class AbstractBaseAvatar(models.Model):
"""
Abstract Class for avatar user and avatar marathon
"""
local_url = models.ImageField(upload_to=upload_to, null=True)
url_to_upload = models.CharField(max_length=200, blank=True, null=True)
@classmethod
def upload_image(cls, image, owner_type, picture_type):
image_name = cls.get_uuid_name_with_extension(image)
avatar = cls.objects.create(
local_url=image,
url_to_upload=Uploader.get_path(owner_type, picture_type, image_name),
)
return avatar
def delete(self, using=None, keep_parents=False):
os.remove(self.url_to_upload)
super().delete(using=using, keep_parents=keep_parents)
@staticmethod
def get_uuid_name_with_extension(image):
img = Image.open(image)
uuid_name = uuid.uuid4()
return f"{uuid_name}.{img.format.lower()}"
class Meta:
abstract = True
2. Все работало. Разработка ушла далеко вперед, но вернулся к вопросу и теперь при аплоаде имеджа получаю ошибку:
AttributeError: 'NoneType' object has no attribute 'rfind'
Написал (print(instance) в функции upload_to):
Выдает:
UserAvatar object (None)
Т.е. не передается объект класса.
Следовательно, кто может подсказать, в чем ошибка? Сразу скажу, что хотелось бы не менять уже принцип, потому что данный класс наследуется "тьмой" других классов и надо будет много переписывать.