在Django可重用应用程序中创建“可选”模型的最佳方法

2024-10-03 02:39:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个可重用的应用程序,在其中定义一些抽象模型,以及那些模型的一些具体版本,如果用户不想自己继承这些模型,可以使用这些模型。如果用户想创建自己的子类,那么我不想让Django创建这些具体的模型。你知道吗

这就是我目前的解决方案:

我的应用程序/摘要.py你知道吗

class AbstractModel1:
    class Meta:
        abstract = True

    field1 = models.CharField(max_length=255)

class AbstractModel2:
    class Meta:
        abstract = True

    field1 = models.CharField(max_length=255)
    field2 = models.ForeignKey(getattr(settings, 'ABSTRACTMODEL1_OVERRIDE', 'myapp.ConcreteModel1'))

我的应用程序/型号.py你知道吗

if not hasattr(settings, 'ABSTRACTMODEL1_OVERRIDE'):
    class ConcreteModel1(AbstractModel1):
        pass

if not hasattr(settings, 'ABSTRACTMODEL2_OVERRIDE'):
    class ConcreteModel2(AbstractModel2):
        pass

然后在用户的应用程序中,他们可以使用提供的具体模型,如果没有,他们可以创建自己的模型子类,如下所示:

用户应用程序/型号.py你知道吗

class CustomModel1(AbstractModel1):
    extrafield1 = models.CharField(max_length=255)

用户应用程序/设置.py你知道吗

ABSTRACTMODEL1_OVERRIDE = "userapp.CustomModel1"

这是实现这一目标的最佳途径吗?在尝试迁移子类模型中的更改时,我是否为自己设置了困难?如果用户想先使用提供的具体类,然后再迁移到自定义类怎么办?你知道吗


Tags: 用户py模型应用程序settingsmodels子类length