如何从类级别的CharField中提取字符串?

时间:2019-05-02 17:09:29

标签: django django-models

因为我希望Charfield字符串将我的图像保存在特定的文件夹中。我想从Django的CharField传输或提取字符串

我尝试了to_python方法,该方法在类级别不起作用。

class Project(models.Model):
    filename = models.CharField(max_length=150)
    cata = models.CharField(max_length=150)
    image = models.ImageField(max_length=100, upload_to= 'ourwork/image/' + str(cata) + '/' + str(filename) , default='ourwork/default/default.png', verbose_name='图片')    
    def __str__(self):
        return self.filename

我想查看我在Django管理控制台上上传的图像以显示在“ ourwork / project / image”文件夹中

1 个答案:

答案 0 :(得分:0)

简短答案:使用 callable 并让可调用对象根据模型对象的字段计算upload_to属性。

您可以将可调用用作FileField.upload_to attribute [Django-doc],如文档所述:

  

upload_to也可以是可调用的,例如函数。这将   被调用以获得上传路径,包括文件名。这个   可调用的必须接受两个参数并返回Unix风格的路径   (带有正斜杠)将被传递到存储系统。

因此我们可以将其定义为:

def our_upload_to(instance, filename):
    return 'ourwork/image/{}/{}'.format(instance.cata, instance.filename)

class Project(models.Model):
   filename = models.CharField(max_length=150)
   cata = models.CharField(max_length=150)
   image = models.ImageField(max_length=100, upload_to=our_upload_to, default='ourwork/default/default.png', verbose_name='图片')    

   def __str__(self):
       return self.filename

因此,我们在此基于upload_to(第一个参数)计算instance参数,而忽略了最初由上传文件的用户提供给文件的文件名。