Django将不需要的字符附加到Imagefield name属性中



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

只有在为测试创建虚拟映像文件时才会发生这种情况。当我在Django的admin中上传一个真实的图像时,它只返回文件路径,不做任何修改。我使用Sqlite进行测试,使用Postgres进行开发,因为开发数据库是在Heroku中,它不允许创建表

我试图改变我如何创建虚拟文件,像使用一个字节对象,使用b64decode()与SimpleUploadedFile()从django,但结果是一样的。

我的模型:

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, 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会自动将最后上传的文件重命名为一个由字母数字组成的字符串。

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

相关内容

最新更新