【问题标题】:Problem using django mptt使用 django mptt 的问题
【发布时间】:2009-02-03 13:09:04
【问题描述】:

我在实现 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

谢谢

【问题讨论】:

  • 是否需要添加为叶子节点?我以为你已经通过外键关系解决了这个问题。
  • 同意 Staale;你有ForeignKey,为什么Financials需要参与到树结构中?
  • 这里的问题是我想在这里做一些 Acl 的东西。所以为此我需要将模型保存在 mptt 树结构中。那么,如果我从财务中删除外键,那么如何将财务作为孩子添加到公司??

标签: python django mptt django-mptt


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我推荐 django-polymorphic_tree

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      相关资源
      最近更新 更多