1

我在实现 django mptt 时遇到问题。

这是我的模型:

   class Company(models.Model):
       name = models.CharField( max_length=100)
       parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

   mptt.register(Company, order_insertion_by=['name'])

class Financials(models.Model):
    company = models.ForeignKey(Company, related_name="financials")
    year = models.IntegerField()
    revenue = models.DecimalField(max_digits = 10, decimal_places = 2)

所以我正在研究的是如何将财务作为一个孩子添加到公司。我尝试mptt.register(Financials, parent = Company)了这当然会给我错误。

所以 mytree 结构将是:

company1
....................> Financial1
--------------------> Financial 2

company2
-------------------->Financial 3

谢谢

4

2 回答 2

1

Django-mptt 不支持同一树中的多种类型的对象。您可以让 Financial 和 Company 都从同一个父类继承,然后根据该父类的实例构建树。您需要在父类上存储一个“内容类型”字段,以便您可以将父类的实例转换为正确的子类。这是一个严重的黑客攻击,因为它违反了继承的精神。财务不是公司,它是公司的属性。正确的答案是修复您的 ACL 设计,以便您可以使用 ForeignKey。

于 2009-02-04T17:37:51.270 回答
1

我推荐 django-polymorphic_tree

于 2012-10-11T17:53:56.263 回答