我有一个像下面这样的模型,它太大了,需要拆分成一个单独的活动表。一天结束时,一个表将包含所有对象,另一个表仅包含活动对象。
class Tickets(models.Model):
price = ....
number = .....
date = ....
active = ....
parent = models.ForeignKey('self', related_name='children')
ManyMoreFields
复杂性有两个来源:
1) ActiveTickets表上的父字段将指向Tickets表格。related_name不应更改。
2) ActiveTickets和Tickets表都有继承自它们的代理模型。
class CityTickets(Tickets):
class Meta:
proxy = True
class ActiveCityTickets(ActiveTickets):
class Meta:
proxy = True
显然,我可以复制并粘贴Ticket中的所有字段(有很多),但这不是正确的方法。我尝试使用抽象继承和Mixin(在Tickets和ActiveTickets都继承的单独类中定义字段)。
抽象继承的一个问题是父ForeignKey字段会引起问题,因为它是重复的,而且related_name是相同的。一般来说,我的尝试会导致我的单元和功能测试失败。
这里有哪些优雅的方法?我应该考虑创建两个独立的MySQL表,然后只使用一个带有多个管理器(和数据库路由器)的模型吗?这合理吗?
也许这有帮助:
class Base(models.Model):
m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related")
class Meta:
abstract = True
https://docs.djangoproject.com/en/dev/topics/db/models/#be-小心相关名称