当前位置: 首页 > 面试题库 >

Django-无法使用动态upload_to值为ImageField创建迁移

濮阳唯
2023-03-14
问题内容

我刚刚将应用程序升级到1.7(实际上仍在尝试)。

这是我在models.py中拥有的:

def path_and_rename(path):
    def wrapper(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(path, filename)
    return wrapper

class UserProfile(AbstractUser):
    #...
    avatar = models.ImageField(upload_to=path_and_rename("avatars/"),
                               null=True, blank=True,
                               default="avatars/none/default.png",
                               height_field="image_height",
                               width_field="image_width")

当我尝试时makemigrations,它抛出:

ValueError: Could not find function wrapper in webapp.models.
Please note that due to Python 2 limitations, you cannot serialize unbound method functions (e.g. a method declared
and used in the same class body). Please move the function into the main module body to use migrations.

问题答案:

我不确定是否可以回答自己的问题,但我只是想出了(我认为)。

根据此错误报告,我编辑了代码:

from django.utils.deconstruct import deconstructible

@deconstructible
class PathAndRename(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 = PathAndRename("/avatars")

然后,在字段定义中:

avatar = models.ImageField(upload_to=path_and_rename,
                               null=True, blank=True,
                               default="avatars/none/default.png",
                               height_field="image_height",
                               width_field="image_width")

这对我有用。



 类似资料:
  • 我正在使用Eloquent和SlimPHP以及Capsule作为DB“Facade”。 现在我只是支持MySql,因为我需要动态创建表,所以我试图构建两个查询并运行它们。 做的时候 要查看查询是如何生成的,它们如下所示: 字符串(351)“如果不存在,则创建表`responses\\u 44`(`id`int(11)NOT NULL AUTO\\u INCREMENT,`field\\u 20`v

  • 我刚到姜戈。我目前正在通过推特应用编程接口对实时用户推文进行情感分析。我已经设法做了分析和表达情感。现在,我想在我的Django应用程序中使用图表(也许是条形图或饼图)来可视化情感,但我不确定如何实现。 我在考虑使用图表。js使其具有响应性,但大多数示例都使用静态数据,因此我没有成功地将从Twitter API提取的数据与图表集成。js。 这是我的网页截图。这张表格是摘录的推特及其相应的情感。然而

  • 以下是我试图自动处理数据的网站:网站链接。我必须做到以下几点: 选择位置为维多利亚,然后选择区域为墨尔本。 选择制作为,比方说,阿巴斯。将重复其他制作。 我尝试过静态XPath,也尝试过用有限的知识创建动态XPath,但我仍然无法完成这项任务。 我使用python selenium和自动化谷歌chrome。 下面是我错误代码的快照,用于选择Abarth as make:

  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 问题内容: 我只是开始使用django,而且我还没有找到有关如何显示imageField的很多信息,所以我做到了: models.py views.py image.html 我已经保存了图像,因为终端,我知道在那里,如果在image.html中这样做: 输出是:Car object 谁能告诉我我的错误在哪里? 问题答案: 一个包含一个属性,你可以在你的模板用来呈现适当的HTML。

  • 问题内容: 我正在从views.py文件更新模型中的某些字段。使用时,所有其他字段均已正确更新 只是,未更新,奇怪的是,当我从admins.py检查模型时,它显示了我上传的文件名,但是我的文件未显示在我的目录中(我在其中上传了所有图片) views.py 这就是我在settings.py中管理媒体文件的方式 我认为只有文本存储在ImageField中,并且Image不会上移到目录中注:我正在使用从