Django无法执行makemigrations命令

4

我正在尝试使用makemigrations上传Excel文件,但出现了一个错误,显示如下:

ValueError:在uploadExcel.models中找不到函数包装器。

这是我在uploadExcel.models中使用的代码。

from django.db import models
import os

def path_and_rename(path):
    def wrapper(instance, filename):
        ext = filename.split('.')[-1]
        if instance.pk:
            filename = '{}.{}'.format(instance.pk, ext)
        else:
            filename = '{}.{}'.format('data', ext)
        return os.path.join(path, filename)
    return wrapper



class ExcelUploadModel(models.Model):

    file_name = models.CharField(max_length=255, blank=True)
    document = models.FileField(upload_to=path_and_rename('test/'))
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.file_name

    def delete(self,*args, **kwargs):
        self.document.delete()
        super().delete(*args, **kwargs)

非常感谢您的帮助。

谢谢。

最好的祝福,


1
你能添加完整的错误回溯吗? - JPG
1
我认为这个可以帮助https://code.djangoproject.com/ticket/22999? - Ashish
1个回答

3

试试这个

from django.utils.deconstruct import deconstructible

@deconstructible
class PathRename(object):

    def __init__(self, sub_path):
        self.path = sub_path

    def __call__(self, instance, filename):
        ext = filename.split('.')[-1]
        # set filename as random string
        filename = '{}.{}'.format(uuid4().hex, ext)
        # return the whole path to the file
        return os.path.join(self.path, filename)

path_and_rename = PathRename("/test")

那么

class ExcelUploadModel(models.Model):
    document = models.FileField(upload_to=path_and_rename)

这个工作做得非常好,谢谢你,伙计。 - Cesar Rodriguez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接