【问题标题】:Django Cannot make makemigrations [duplicate]Django无法进行迁移[重复]
【发布时间】:2020-05-09 07:02:53
【问题描述】:

我正在尝试进行迁移以上传 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)

任何帮助将不胜感激 谢谢 最好的,

【问题讨论】:

  • 能否添加完整的错误回溯?
  • 我认为这可以帮助 code.djangoproject.com/ticket/22999>?

标签: django django-models


【解决方案1】:

试试这个

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)

【讨论】:

  • 这个作品很漂亮,谢谢你伟大的工作人员。
猜你喜欢
  • 2018-01-25
  • 2021-06-27
  • 2021-12-09
  • 2021-10-13
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多