使用 django mptt 时出现问题

发布于 2024-07-13 01:18:32 字数 853 浏览 12 评论 0原文

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

我正在研究如何将 Financial 作为子项添加到 Company 中。 我尝试了 mptt.register(Financials, Parent = Company) 这当然给了我错误。

所以 mytree 结构将是:

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

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

谢谢

I am having problem implementing django mptt.

Here is my model:

   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'])

And

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

So what I am looking at is how to add Financial as an child to Company.
I tried mptt.register(Financials, parent = Company) which of course give me error.

so mytree structure will be:

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

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

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尴尬癌患者 2024-07-20 01:18:33

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

Django-mptt does not support multiple types of object in the same tree. You could have Financial and Company both inherit from the same parent class, and then build the tree out of instances of that parent class. You'd need to store a "content type" field on the parent class so you can cast instances of the parent class to the proper subclass. This is a gross hack though, as it violates the spirit of inheritance. A Financial is not a Company, it's an attribute of a Company. The correct answer is to fix your ACL design so you can use a ForeignKey.

一个人的夜不怕黑 2024-07-20 01:18:33

我推荐 django-polymorphic_tree

I recommend django-polymorphic_tree

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文