我希望创建一个数据库结构,其中每个组都有一个指向单个策略的链接。
策略可以是各种不同类型中的一种,每种类型:-
随着时间的推移,将会创建更多的策略,每个策略都有自己的属性等等。
我最初的直觉是,Policy是一个抽象类,它与组和方法的存根有链接:-
class Policy(models.Model):
group = models.OneToOneField(Group)
class Meta:
abstract = True
def do_this():
raise NotImplementedError()
def do_that():
raise NotImplementedError()然后,不同的策略类型可以添加它们自己的属性,但是它们必须实现接口。
class PolicyA(Policy):
new_attribute = models.IntegerField()
def do_this():
# implementation A
def do_that():
# implementation A但是如果我这样做的话,我就没有办法向一个组索取它的策略,因为策略是抽象的。
如果删除抽象设置,那么(使用类似django模型的utils,我猜)我可以在运行时获得“真实”类型的策略,但这对我来说并不合适。
我读过一些关于一般关系的文章,但这是不是“正确”的方式呢?我只想在我离开一条或另一条路之前确定一下。
发布于 2017-06-14 20:02:26
我会把政策作为一个主要模型,而PolicyA则是一个proxymodel。
from model_utils.managers import QueryManager
class Policy(models.Model):
group = models.OneToOneField(Group)
content_type = models.SmallIntegerField(choices=settings.CONTENT_TYPE,editable=False)
def __init__(self, *args, **kwargs):
super(Policy, self).__init__(*args, **kwargs)
self.content_type = self.DEFAULT_CONTENT_TYPE
class PolicyA(Content):
DEFAULT_CONTENT_TYPE = settings.A_TYPE
objects = QueryManager(content_type=DEFAULT_CONTENT_TYPE)
class Meta:
proxy = Truehttps://stackoverflow.com/questions/44540586
复制相似问题