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

标签 django models filefield imagefield

我想根据 Django 管理员用户提供的字段值将图像上传到媒体根目录。这是我编写的代码,我知道是upload_to 参数导致了问题。但我不知道如何使它工作。
模型.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
每当我运行 python manage.py makemigrations 它显示 NameError: name 'self' is not defined
在此先感谢您的帮助!

最佳答案

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)

来自 Django documentation: Model field reference :

This may also be a callable, such as a function, which will be called to obtain the upload path, including the filename. This callable must be able to accept two arguments, and return a Unix-style path (with forward slashes) to be passed along to the storage system.



在这个可调用对象中,在特定情况下是 path_file_name函数,我们从 instance 构建路径字段是 Image 的特定记录模型。
filter函数删除任何 None列表之外的项目和 join函数通过用 / 连接所有列表项来构造路径.

关于django - 如何根据Django中的字段名称更改ImageField的upload_to参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349547/

相关文章:

sql - Django:在可以使用这种多对多关系之前,对象需要具有字段 "..."的值

python - 使用 Django 模型创建子类别

django - 将 Django 模型父类添加到现有模型中以实现多表继承

python - 具有动态路径的Django自定义图片上传字段

css - 将 file_field_tag 外观更改为按钮外观

django - 搜索后分页的第二页在django中不起作用

python - 在 Django 模型中表示工作日的多选字段

python - Flask-WTForm FileField 返回 None 而不是上传的文件

django - 在 native react 中获取 csrf token

django - Heroku django 应用程序创建 super 用户