我正在尝试创建一个可重用的应用程序,在其中定义一些抽象模型,以及那些模型的一些具体版本,如果用户不想自己继承这些模型,可以使用这些模型。如果用户想创建自己的子类,那么我不想让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"
这是实现这一目标的最佳途径吗?在尝试迁移子类模型中的更改时,我是否为自己设置了困难?如果用户想先使用提供的具体类,然后再迁移到自定义类怎么办?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐