使用模型属性作为字段参数

时间:2017-03-31 04:19:08

标签: python django django-models

我正在尝试创建一个文件夹并将图像上传到其中。我的模型与此类似:

class XYZ(models.Model):
    def code(self):
      syms = ['@','#','$','%','&','*','+','-']
      return ''.join(x+random.choice(syms) for x in [self.name[-2:],self.name[2:]])

    def make_folder(self):
        os.mkdir(os.getcwd()+'/XYZ/'+folder)

    def save(self):
        self.make_folder()
        super(XYZ,self).save(*args,**kwargs)

    name = models.CharField(max_length=20)
    folder = property(code)
    image = models.ImageField(upload_to='HELP_HERE')

我已尝试使用folderself.folderproperty(code),但它说没有定义,我该如何访问此属性?这是正确的方法吗?

我还在configs.py MEDIA_URLMEDIA_ROOT

中进行了设置

1 个答案:

答案 0 :(得分:1)

我认为一种更简单易懂的方法是避免使用内部类函数并执行类似这样的操作:

# Reference this function outside of your model class.
def xyz_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/xyz_<id>/<filename>
    return 'xyz_{0}/{1}'.format(instance.id, filename)

然后,在您的模型上,引用upload_to字段中的函数,如下所示:

class XYZ(models.Model):
    image = models.ImageField(upload_to=xyz_directory_path)

设置好媒体配置后,这应该可行。关于文件处理here有一个非常好的简单解释。