如何根据Django中的字段名更改ImageField的upload_to参数?

Min*_*nnR 2 django models filefield imagefield

我想根据Django管理员用户提供的字段值将图像上传到媒体根目录.这是我编写的代码,我知道upload_to参数导致了问题.但我不知道如何使它发挥作用.

models.py

class Info(models.Model):
    file_no = models.CharField(max_length=100)
    date = models.DateField()
    area = models.IntegerField(default=0.00)
    mouja = models.CharField(max_length=100)
    doc_type_choices = (
            ('deed', 'Deed'),
            ('khotian', 'Khotian'),
        )
    doc_type = models.CharField(max_length=50,
                                choices=doc_type_choices,
                                default='deed')
    doc_no = models.CharField(max_length=50)

    def __unicode__(self):
        return self.file_no

class Image(models.Model):
    info = models.ForeignKey('Info')
    content = models.ImageField(upload_to=self.info.mouja/self.info.doc_type)

    def __unicode__(self):
        return self.info.file_no
Run Code Online (Sandbox Code Playgroud)

每当我运行python manage.py makemigrations时它会显示NameError:name'self '未定义 事先感谢您的帮助!

Wto*_*wer 7

upload_to关键字中,您需要提供要定义的函数,例如:

def path_file_name(instance, filename):
    return '/'.join(filter(None, (instance.info.mouja, instance.info.doc_type, filename)))

class Image(models.Model):
    content = models.ImageField(upload_to=path_file_name)
Run Code Online (Sandbox Code Playgroud)

来自Django文档:模型字段参考:

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

在这个callable中,在特定情况下是path_file_name函数,我们从instance字段构建一个路径,该路径是Image模型的特定记录.

filter函数从None列表中删除任何项目,该join函数通过加入所有列表项来构造路径/.

  • 我又回到最初的答案。也许“os.path.join”在这里更好,但我似乎也测试过这个。 (2认同)