将django中现有对象的默认图像设置为ImageField
我有一个模型有一个将django中现有对象的默认图像设置为ImageField,django,django-models,Django,Django Models,我有一个模型有一个ImageField class A(model.Model): blah = CharField(max_length=10) profile = ImageField(upload_to='uploads/', null=True, blank=True) 我想为现有数据设置默认图像,因此我尝试将文件保存在shell中,如下所示: >>> myapp.models import A >>> from django.cor
ImageField
class A(model.Model):
blah = CharField(max_length=10)
profile = ImageField(upload_to='uploads/', null=True, blank=True)
我想为现有数据设置默认图像,因此我尝试将文件保存在shell中,如下所示:
>>> myapp.models import A
>>> from django.core.files import File
>>> for a in A.objects.all():
>>> a.profile.save('default.jpg', File(open('/Users/myusername/Pictures/default.jpg', 'rb')))
我很高兴,直到我发现在myprojectroot/media/uploads/
中,文件的数量与A
对象的数量一样多
我想知道是否有任何方法可以像使用update()
方法一样,对所有对象设置相同的图像文件
有人能给它照点灯吗
提前谢谢。是的,您可以将文件
default.jpg
存储在uploads/
目录中,然后使用以下内容更新对象:
A.objects.filter(profile=None).update(profile='uploads/default.jpg')
A.objects.filter(profile=None).update(profile='uploads/default.jpg')
我还建议将字段设置为不可为空,并将其用作默认值:
class A(model.Model):
blah = CharField(max_length=10)
profile = ImageField(
upload_to='uploads/',
default='uploads/default.jpg',
blank=True
)
A类(模型.模型):
blah=CharField(最大长度=10)
配置文件=图像字段(
上传到=“上传/”,
default='uploads/default.jpg',
空白=真
)
窗帘后面的ImageField
是数据库中的varchar
字段,用于存储所用图像的路径。DjangoImageField
具有额外的逻辑,因此它将其表示为带有某些逻辑的,但它作为字符串存储在数据库中
它将生成多个图像的原因是,您可以稍后决定编辑其中一个图像。如果是这种情况,所有其他图像都将看到这些编辑。因此,如果文件名“冲突”,它将进行复制以防止出现这种情况。但是,如果使用默认图像,则不修改该图像。因此,最好将文件标记为只读