从模型动态继承

时间:2020-09-14 15:24:55

标签: python python-3.x django django-models

我有一个照片模型,该模型可以帮助我同时将每个图像存储为缩略图:

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 默认图片 。我该如何实现?我可以以某种方式使用构造函数吗?

预先感谢!

1 个答案:

答案 0 :(得分:1)

我想说,处理用例的最佳方法略有不同。您可以将函数传递给upload_to。将为该功能提供上载文件(docs)的签名instancefilename

您可以使用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字段,但是我不知道这是否合适。

相关问题