代码之家  ›  专栏  ›  技术社区  ›  Ofri Raviv

django中多继承类的逆关系

  •  5
  • Ofri Raviv  · 技术社区  · 14 年前

    class Law(models.Model):
        ... 
    
    class Bill(models.Model):
        ... # data for a proposed law, or change of an existing law
    
    class PrivateBill(Bill):
        ... # data for a Bill that was initiated by a parliament member
    
    class GovernmentBill(Bill):
        ... # data for a Bill that was initiated by the government
    

    将来我(或者其他人)可能会想添加更多的账单类型。

    (指出这项法案将要修改的法律)我的问题是:

    如果我 ,从每一个法案到法律,我都会有一种联系,但法律只有一种联系 逆关系 到票据(票据集),而不是一个不同的反向关系,每种类型的票据。当然,我可以过滤每种类型的法案,只得到那些指向特定法律的,但这是我认为我需要经常使用的东西,所以我认为有privatebill\u集,governmentbill\u集等可以使代码更可读。

    另一种可能的解决方案是添加外键 到每个继承类

    你怎么解决这个问题?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Reto Aebersold    14 年前

    也许您可以将Bill类抽象化,并这样做:

    class Bill(models.Model):
        law = models.ForeignKey(Law, related_name="%(app_label)s_%(class)s_related")
    
        class Meta:
            abstract = True
    
    class PrivateBill(Bill):
        pass
    
    class GovernmentBill(Bill):
        pass
    
        2
  •  1
  •   Daniel Roseman    14 年前

    Generic relations 可能是这样的-它们允许你有一个类似于ForeignKey的结构,它指向任何其他模型。