在Django的多表继承中,是否可以覆盖upload_to参数?

Thi*_*Lam 2 django django-models

对于以下代码:

class Image(models.Model):
   alt_name = models.CharField(max_length=200)
   url = models.CharField(max_length=255, blank=True)

class Button(Image):
   source = models.ImageField(max_length=1024, upload_to='buttons')

class Snapshot(Image):
   source = models.ImageField(max_length=1024, upload_to='snapshots')

class Banner(Image):
   source = models.ImageField(max_length=1024, upload_to='banners')
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想将每种不同类型上传到它自己的上传文件夹.例如,横幅将放在一个名为的文件夹下banners,快照将被置于其下snapshots.上面的工作正如预期的那样,但我正在为每个子类重复ImageField.以上是实现我的目标的唯一方法还是有DRYer方法?

and*_*lei 7

upload_to参数是可调用的,所以你可以在一个函数传递.你可以这样做:

import os
def upload_path(instance, filename):
     return os.path.join(instance.__class__.__name__ + 's', filename)

class Image(models.Model):
    alt_name = models.CharField(max_length=200)
    url = models.CharField(max_length=255, blank=True)
    source = models.ImageField(max_length=1024, upload_to=upload_path)
Run Code Online (Sandbox Code Playgroud)