1

我有一个像下面这样的模型,它变得太大,需要拆分成一个单独的活动表。一天结束时,一个表将包含所有对象,而另一个表将仅包含活动对象。

   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 中的所有字段(有很多),但这不是正确的做法。我尝试使用抽象继承和 Mixins(在由门票和 ActiveTickets 继承的单独类中定义字段)。

抽象继承的一个问题是 ForeignKey 字段 parent 会导致问题,因为它是重复的,并且 related_name 是相同的。通常,我的尝试导致我的单元和功能测试失败。

这里有哪些优雅的方法?我是否应该考虑创建两个单独的 MySQL 表,然后只使用具有多个管理器(和 db 路由器)的单个模型?这合理吗?

4

1 回答 1

2

也许这有帮助:

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-careful-with-related-name

于 2012-04-04T16:34:18.447 回答