Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 Can';t设置ImageField url属性_Django_Attributes_Imagefield - Fatal编程技术网

Django Can';t设置ImageField url属性

Django Can';t设置ImageField url属性,django,attributes,imagefield,Django,Attributes,Imagefield,我想更改ImageField的属性,但是我经常遇到“无法设置属性”错误 我的模型是 class Society(models.Model): name = models.CharField(max_length=200) slug = models.SlugField(unique=True) summary = models.TextField(blank=True,null=True) members = models.ManyToManyField(

我想更改ImageField的属性,但是我经常遇到“无法设置属性”错误

我的模型是

class Society(models.Model):
     name = models.CharField(max_length=200)
     slug = models.SlugField(unique=True)
     summary = models.TextField(blank=True,null=True)
     members = models.ManyToManyField(User,null=True,blank=True)
     gallery = models.ForeignKey(Gallery,null=True,blank=True)
     avatar = models.ImageField(upload_to=get_society_path)

     def save(self,*args,**kwargs):
          super(Society, self).save(*args,**kwargs)
          fix_avatar_path(self)

     def clean(self):
          if self.id:
               self.avatar.path = get_society_path(self,self.avatar.path)
               save_thumb(self.avatar.path)
我的助手功能包括:

def get_society_path(instance,filename):
     seperator_val = instance.id
     if seperator_val is None:
          seperator_val = get_time()
     return '%s/society_%s/%s' % (settings.UPLOAD_ROOT,seperator_val,time_to_name(filename))

def fix_avatar_path(instance):
     org_society_path = get_society_path(instance,instance.avatar.name)
     make_upload_dir(org_society_path)
     move(instance.avatar.path,org_society_path)
     os.rmdir(os.path.dirname(instance.avatar.path))
     instance.clean()
问题是:

我想将我的社团目录保存为社团id。但通常,在保存模型之前,我无法分配任何id。所以我正在创建一个tmp文件,它的名称是一个时间值。然后要访问societies文件夹,我想重命名这个文件。因此,我的fix_头像只需在社会保存后将tmp文件的内容移动到society_(society_id)文件夹中。到目前为止一切都很好。然而,我的社团的ImageField仍然保存着以前创建的文件夹。为了改变它的值,我发现我可以使用clean方法(从这里),但我仍然得到了相同的结果,路径没有改变,并给出了“cannotsetattribute”响应

有什么想法吗?

问题在于:

self.avatar.path = get_society_path(self,self.avatar.path)

无法更改FileField/ImageField实例中path属性的值,它是只读的。在Django 1.4中,有一个方法可以改变这一点,但不确定,自从提出这个问题以来,Django是否改变了这一点。关于此不可能的通知单仍然存在:

但是,您实际上可以通过如下方式更改路径:

self.avatar = 'uploads/example/path/'
该工作还包括:

self.avatar.name = 'uploads/example/path/'

它已经在多个场合对我们有效。

截至2019年1月,这仍然是一个只读字段