我有一个模型Property
,其中包含某些字段和相关方法:
class Property(models.Model):
table = models.ForeignKey(Table)
field1 = models.CharField()
field2 = models.IntegerField()
field3 = models.BooleanField()
class Meta:
abstract = True
def post():
pass
但是从概念上讲,我有一定数量的列类型。在各个字段中没有区别,只是在实现某种方法的行为上没有区别:
class Property1(Property):
def post():
# execute behavior for Property1
pass
class Property2(Property):
def post():
# execute behavior for Property2
pass
以此类推。
如果我将Property
变成一个抽象的基本模型类,让其余的继承它,那么对于每个属性,我将得到不同的表。我不确定我是否想要那个。所有表看起来都一样,这是多余的。
但是同时运行查询以获取表中的所有属性并调用post()
时,我希望执行相应的行为:
for prop in table.property_set.all():
prop.post()
我有什么选择?
答案 0 :(得分:3)
为此,您可以使用proxy模型。尝试这样:
class Property(models.Model):
table = models.ForeignKey(Table)
field1 = models.CharField()
field2 = models.IntegerField()
field3 = models.BooleanField()
class Property1(Property):
class Meta:
proxy = True
def post():
# execute behavior for Property1
pass
class Property2(Property):
class Meta:
proxy = True
def post():
# execute behavior for Property2
pass
根据文档:
MyPerson类与其父Person类在同一数据库表上操作。特别是,也可以通过MyPerson访问Person的任何新实例,反之亦然:
因此您可以获取如下的代理实例:
Property1.objects.filter(pk__in=table.property_set.all())