【问题标题】:Proper way to extend model classes in Django在 Django 中扩展模型类的正确方法
【发布时间】:2014-07-14 16:34:59
【问题描述】:

假设我们要构建两个独立的 Django 应用程序:

  • 用于投票
  • 供评论

这些功能中的任何一个都可以插入到任何现有的 Django 模型中。例如,我们可能希望启用对模型 Article 的投票和评论。

但是如果我们想在 cmets 上启用投票呢? Comment 模型将取决于投票应用程序。如果我们只想使用 cmets,根本不使用投票应用程序怎么办?由于依赖关系,它不会工作。

所以,启用投票应该在模型定义之外进行,对吧?例如,在设置中。现在,如何在不修改代码的情况下动态扩展这些现有模型?

经过一番研究,我发现了add_to_class 方法,但似乎使用它被认为是不好的开发实践。

【问题讨论】:

    标签: python django django-models monkeypatching


    【解决方案1】:

    您为什么要将此功能作为模型的一部分?通常这些是单独的应用程序,模型与文章有关系。您可以使用generic relations 定义您的评论或投票应用程序与目标模型之间的数据库关系。

    【讨论】:

    • 我想为模型添加一些功能。例如Article.votes.get_score()
    • 但这是 Vote 类的功能,而不是文章。
    • 不过,Article 必须定义 votes。如果不修改Article 代码,我无法做到这一点。
    • 但这就是我的全部观点。 votes 是反向关系,由贡献应用程序通过 ForeignKey 或通用关系添加。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2022-01-08
    • 2012-05-28
    • 1970-01-01
    • 2013-12-23
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多