1

我最近开始将 Django 1.5.4 用于带有 MySQL 后端的 Web 应用程序。刚开始,我遇到了某些限制,这让我想知道 Django 是否是前进的正确方式。

一些明显的缺点是:

  1. 缺少复合主键。该漏洞已开放 8 年。对于依赖大量多对多表来拥有不必要的自动主键并使用 unique_together 属性的应用程序来说,这不是很糟糕。

    参考:
    - http://comments.gmane.org/gmane.comp.python.django.devel/37301
    -如何删除 Django 中自动生成的 ManyToMany 表中的冗余 ID 字段?
    - https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys#Multi-ColumnPrimaryKeysupport
    - https://code.djangoproject.com/ticket/373

  2. 一些简单的事情,比如在 SQL 模式中表示默认值。我知道他们不修复它的原因,但这让生活变得更加艰难。

    参考:
    - https://code.djangoproject.com/ticket/470

  3. 无法声明固定字符字段

    参考:
    - https://code.djangoproject.com/ticket/9349

    缺点(引自上述错误报告):在我的特定应用程序中,从 Django 自动生成的 varchar 字段更改为 char 字段将数据库的大小从 550GB 降低到 300GB。在很多情况下,确实需要存储固定长度的字符数据。

  4. 主键不能无符号(错误报告已经来回了很长时间)
    。这并不难实现。它使可用 ID 加倍。

    参考:
    - https://code.djangoproject.com/ticket/56

正如我所说,这只是一个开始。我遇到了一些缺点,让我觉得如果 Django 忽略了这些基本的东西,那么它是否是正确的框架?我想问一下 Django 社区充满了问题,这些问题需要破解其他简单的东西,或者这些只是少数例外?

我正在考虑尝试 Pyramid/Pylons 框架。任何帮助/建议将不胜感激。

更新:增加了 2 个

4

1 回答 1

4

老实说,如果这些东西对您来说是障碍,请不要使用 Django。我是 Django 的坚定支持者,但如果你觉得它不能满足你的需求,你应该选择别的东西。

我必须说,尽管这些都是奇怪的事情。我无法想象为什么中间 M2M 表上的额外主键字段会成为问题。(但是请注意,复合字段 - 包括 PKs - 已成为今年代码之夏项目的主题,并且看起来已准备好合并 - 请参阅https://groups.google.com/forum/#!topic/django-开发人员/CD7OrkJ63zc )

再说一次,为什么在 SQL 级别缺少默认值“让生活变得更难”很难理解:如果您通过 Django 的 ORM 做所有事情,那么应用默认值没有任何区别;另外,正如 Adrian 在那张票上所说的那样,在 SQL 中执行它实际上会通过使诸如可调用默认值之类的事情变得不可能而减少当前的功能。

此外,您应该反思为什么让这些相对琐碎的细节掩盖了 Django 给您带来的巨大好处:富有表现力的 ORM、模板语言、蓬勃发展的社区、大量的第三方应用程序......但是,即便如此,再次强调如果它真的不适合你,你可以自由选择其他东西。

于 2013-09-24T08:38:00.387 回答