Django 将不需要的字符附加到 Imagefield 名称属性
Django is appending unwanted characters to Imagefield name attribute
我正在为我的 Imagefield
模型编写测试以检查其相对路径名,但它没有通过,因为 __str__
方法 returns 文件路径 + 一些不需要的人物。例如,创建为 test_image.png
的文件被 return 编辑为 test_image_ak0LKei.png
,尽管我明确定义了文件名。每次创建新文件时,附加部分都会发生变化,例如return test_image_HqOXJc4.png
。
只有在我为测试创建虚拟图像文件时才会发生这种情况。当我在 Django 的管理中上传真实图像时,它只是 returns 文件路径而没有任何修改。我使用 Sqlite 进行测试,使用 Postgres 进行开发,因为开发数据库在 Heroku 中,它不允许 table 创建
我试图改变我创建虚拟文件的方式,比如使用字节对象,使用 django 中的 b64decode() 和 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, 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 会通过添加一串字母数字字符自动重命名最后上传的文件。
真实图像也会发生同样的情况(尝试将相同的图像上传两次!)
我正在为我的 Imagefield
模型编写测试以检查其相对路径名,但它没有通过,因为 __str__
方法 returns 文件路径 + 一些不需要的人物。例如,创建为 test_image.png
的文件被 return 编辑为 test_image_ak0LKei.png
,尽管我明确定义了文件名。每次创建新文件时,附加部分都会发生变化,例如return test_image_HqOXJc4.png
。
只有在我为测试创建虚拟图像文件时才会发生这种情况。当我在 Django 的管理中上传真实图像时,它只是 returns 文件路径而没有任何修改。我使用 Sqlite 进行测试,使用 Postgres 进行开发,因为开发数据库在 Heroku 中,它不允许 table 创建
我试图改变我创建虚拟文件的方式,比如使用字节对象,使用 django 中的 b64decode() 和 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, 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 会通过添加一串字母数字字符自动重命名最后上传的文件。
真实图像也会发生同样的情况(尝试将相同的图像上传两次!)