Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将django中现有对象的默认图像设置为ImageField_Django_Django Models - Fatal编程技术网

将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
字段,用于存储所用图像的路径。Django
ImageField
具有额外的逻辑,因此它将其表示为带有某些逻辑的,但它作为字符串存储在数据库中

它将生成多个图像的原因是,您可以稍后决定编辑其中一个图像。如果是这种情况,所有其他图像都将看到这些编辑。因此,如果文件名“冲突”,它将进行复制以防止出现这种情况。但是,如果使用默认图像,则不修改该图像。因此,最好将文件标记为只读