@9550668

Не получается загрузка image'ей через AbstractClass. Где ошибка?

Всем доброго времени суток. Возникла проблема и никак не могу найти в чем она.

Суть проблемы:
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)
Т.е. не передается объект класса.
Следовательно, кто может подсказать, в чем ошибка? Сразу скажу, что хотелось бы не менять уже принцип, потому что данный класс наследуется "тьмой" других классов и надо будет много переписывать.
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы