Объект FileDescriptor не имеет атрибута path - PullRequest
0 голосов
/ 17 марта 2019

При загрузке файла в админке Django я пытаюсь создать и переименовать копию этого файла, используя сигнал.Однако я получаю следующую ошибку:

У объекта 'FileDescriptor' нет атрибута 'path'

модели

class Template(models.Model):
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)

    def org_folder(self, filename):
        path = "templates/%s/%s/%s" % (self.organization.name, self.name, filename)
        return path

    docxfile = models.FileField(upload_to=org_folder)

сигналов

@receiver(post_save, sender=Template)
def create_clean_docxfile(sender, instance, *args, **kwargs):
    if sender is Template:
        file = Template.docxfile.path
        copyfile(file, 'temp.zip')

Любые рекомендации?

Обновление

По рекомендации Даниэля я исправил ошибку.Мне пришлось обновить сигнал до следующего:

@receiver(post_save, sender=Template)
def create_clean_docxfile(sender, instance, *args, **kwargs):
    file = instance.docxfile.path
    copyfile(file, 'temp.zip')

1 Ответ

0 голосов
/ 17 марта 2019

Отправитель - это класс. Вам необходимо получить доступ к экземпляру, который предоставляется аргументом экземпляра. (И это не нужно, если заявление.)

def create_clean_docxfile(sender, instance, *args, **kwargs):
    file = instance.docxfile.path
    copyfile(file, 'temp.zip')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...