我有一个照片模型,该模型可以帮助我同时将每个图像存储为缩略图:
class Photo(models.Model):
image = models.ImageField(upload_to=upload_path, default=default_image)
thumbnail = models.ImageField(upload_to=upload_path_2, editable=False, default=default_image_2)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
class Meta:
abstract = True
现在我有了另一个模型,我们称它为 User ,它是照片的继承:
class User(Photo):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
现在让我们说有多个类是从Photo继承的,根据继承的类,我想设置另一个 upload_path 和 默认图片 。我该如何实现?我可以以某种方式使用构造函数吗?
预先感谢!
答案 0 :(得分:1)
我想说,处理用例的最佳方法略有不同。您可以将函数传递给upload_to
。将为该功能提供上载文件(docs)的签名instance
和filename
。
您可以使用isinstance
或类似方法检查实例的类,并相应地更改输出。
def upload_path(instance, filename):
if isinstance(instance, User):
return 'user_{0}/{1}'.format(instance.user.id, filename)
return 'photo/{1}'.format(filename)
对default
执行相同的操作比较困难。 default
函数不会传递任何对模型或字段的引用,这将使基于模型覆盖它变得更加困难。您可以简单地向每个具体模型添加一个image
字段,但是我不知道这是否合适。