Django 使用对象的名称将_上载到

Django 使用对象的名称将_上载到,django,django-models,Django,Django Models,我有一个问题,我想你们很容易在Django上传到,但对我来说很难。希望你的帮助 # Upload_to Def from datetime import datetime def avatar_country_path(instance, filename): ext = filename.split('.')[-1] filename = '%s' % (instance.id) datetime_str = datetime.now().strftime("%Y%m%

我有一个问题,我想你们很容易在Django上传到,但对我来说很难。希望你的帮助

# Upload_to Def
from datetime import datetime
def avatar_country_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = '%s' % (instance.id)
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S")
    return "geo/country/%s/%s_avatar.%s" %(filename, datetime_str, ext)

def cover_country_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = '%s' % (instance.id)
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S")
    return "geo/country/%s/%s_cover.%s" %(filename, datetime_str, ext)

def flag_country_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = '%s' % (instance.id)
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S")
    return "geo/country/%s/%s_flag.%s" %(filename, datetime_str, ext)

class BaseCountry(Place, SlugModel):
    # More
    avatar = models.ImageField(max_length=1024, upload_to=avatar_country_path, blank=True)
    cover = models.ImageField(max_length=1024, upload_to=cover_country_path, blank=True)
    flag = models.ImageField(max_length=1024, upload_to=flag_country_path, blank=True
如您所见,我需要3个函数来使用类似的路径将upload_上传到,只是在
字段名称(化身、封面、旗帜)上有所不同,但我不知道如何缩短它


你们能帮帮我吗?

解决如何缩短这样的代码的一个技巧是寻找重复的行,然后尝试对其余行进行参数化,如下所示:

从日期时间导入日期时间
def inject_字段_类型(实例、文件名、后缀):
ext=filename.split('.')[-1]
文件名=“%s%”(实例.id)
datetime\u str=datetime.now().strftime(“%Y%m%d%H%m%S”)
返回“geo/country/%s/%s\%s.%s”%(文件名、日期时间、分机、后缀)
def avatar_国家路径(实例,文件名):
返回注入字段类型(实例、文件名、“化身”)
def cover_country_路径(实例,文件名):
返回注入字段类型(实例、文件名、“封面”)
def标志\国家\路径(实例,文件名):
返回注入字段类型(实例、文件名、“标志”)
类别基准国家(地点、型号):
avatar=models.ImageField(最大长度=1024,上传到=avatar\u国家路径,空白=True)
cover=models.ImageField(最大长度=1024,上传到=cover\u country\u路径,空白=True)
flag=models.ImageField(最大长度=1024,上传到=flag\u country\u路径,空白=True

通过这种方式,您可以更改创建路径所需的逻辑,从而影响所有3个字段,而不必在3个不同的函数中更改它。

无论如何,要对3个字段使用一个Def,兄弟?没有“Def”这样的东西。这些是函数或方法。