【问题标题】:Django, how to rename images using a new auto-numbering per foreign key?Django,如何使用每个外键的新自动编号来重命名图像?
【发布时间】:2017-09-22 01:16:53
【问题描述】:

好的,这个标题可能是最模糊的东西,但我想不出什么好东西。让我解释一下我的问题。

为了解释,我将使用书籍作为示例,只是因为这很容易。所以,想象一下我有 2 个这样的模型:

class Book(models.Model):
    title = models.CharField(max_length=100)


class BookImage(models.Model):
    book = models.ForeignKey(Book)
    image = models.ImageField()
    is_cover = models.BooleanField()

现在,正如您所见,一本书可以有多个图像。我想将上传的图片重命名为 [book title]-[image-id].jpg (当然也可以是任何图片扩展名)。但是,我希望每本书的 image-id 都是唯一的。如果这是有道理的。

所以如果我有 BookA,我希望图像被称为 BookA-1、BookA-2 和 BookA-3 等。BookB 再次从 1 开始,BookB-1、BookB-2、BookB3 等。

知道我该怎么做吗?我自己一直在考虑,但我想不出一个很好的解决方案。起初我以为我可以计算图像的数量并将其加 1,但如果删除图像就会遇到问题。我还考虑过在单独的模型中跟踪 id,但这听起来过于“复杂”。为了让事情变得“更糟”,我想一次上传多张图片(嗯,图片上传是 Django 管理中的内联),所以它也必须能够使用它......所以,我是想知道这里是否有人有好主意?有没有简单的解决方案?

我也在谷歌上搜索了一下,但要么没有人对此有任何问题,要么我只是(嗯,可能)无法找到正确的搜索词(就像我不能来一样加上正确的标题:P)。

感谢阅读!

【问题讨论】:

    标签: python django


    【解决方案1】:

    首先您定义一个函数来处理上传图像并将其传递给您的图像字段。

    def book_image_upload(instance, filename):
            book_title = instance.book.title
            instance_id = instance.id
            extension = filename.split(".")[-1]
            new_filename = "%s-%s.%s" %(book_title, instance_id,extension)
            new_filepath = "books/%s" %(new_filename)
            return new_filepath
    
    class BookImage(models.Model):
        book = models.ForeignKey(Book)
        image = models.ImageField(upload_to=book_image_upload)
        is_cover = models.BooleanField()
    

    【讨论】:

    • 谢谢,但我知道如何更改上传图片的文件名。但我想知道如何跟踪文件名的 id 部分,我希望每本书都是唯一的,而不是所有书籍都是唯一的。也许我不够清楚......:/
    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多