微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 将不需要的字符附加到 Imagefield 名称属性

如何解决Django 将不需要的字符附加到 Imagefield 名称属性

我正在为我的 Imagefield 模型编写一个测试,以检查其相对路径名,但它没有通过,因为 __str__ 方法返回文件路径 + 一些不需要的字符。例如,创建为 test_image.png文件返回为 test_image_ak0LKei.png,尽管我明确定义了文件名。每次创建新文件时,附加部分都会发生变化,例如,它可以返回 test_image_HqOXJc4.png

这仅在我为测试创建虚拟图像文件时发生。当我在 Django 的 admin 中上传真实图像时,它只返回文件路径而不做任何修改。我使用 sqlite 进行测试,使用 Postgres 进行开发,因为开发数据库在 Heroku 中并且不允许创建表

我试图改变我创建虚拟文件的方式,比如使用字节对象,使用 b64decode() 和来自 django 的 SimpleUploadedFile(),但结果是一样的。

我的模型:

class Image(models.Model):
    image = models.ImageField(upload_to='post_images/')
    alt_tag = models.CharField(max_length=125,blank=True)

def __str__(self):
    return self.image.name

我的测试。我尝试的最后一件事是使用下面的静态方法

class ImageTestCase(TestCase):
    @staticmethod
    def get_image_file(name='test_image.png',ext='png',size=(50,50),color=(256,0)):
        file_obj = BytesIO()
        image = PIL_IMAGE.new("RGBA",size=size,color=color)
        image.save(file_obj,ext)
        file_obj.seek(0)
    return File(file_obj,name=name)

def setUp(self):
    test_image = Image.objects.create(
        image = self.get_image_file(),alt_tag = 'test image'
    )

def test_image_category(self):
    image1 = Image.objects.get(id=1)
    self.assertEqual(str(image1),'post_images/test_image.jpg')

失败的测试结果:

Traceback (most recent call last):
  File "/home/edumats/Projects/blog/blog/posts/test_models.py",line 67,in test_image_category
    self.assertEqual(str(image1),'post_images/test_image.png')
AssertionError: 'post_images/test_image_ak0LKei.png' != 'post_images/test_image.png'
- post_images/test_image_ak0LKei.png
?                       --------
+ post_images/test_image.png

解决方法

当您在同一文件夹中上传两个同名文件时,django 会通过添加一串字母数字字符来自动重命名最后一个上传的文件。

真实图像也会发生同样的情况(尝试上传相同的图像两次!)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。