我最近开始将Django 1.5.4用于带有MySQL后端的Web应用程序。刚开始时,我遇到了一些限制,让我想知道Django是否是正确的方法。
一些明显的缺点是:
缺少复合主键。 bug已开放8年。对于依赖于许多多对多表的应用来说,拥有一个不必要的自动主键并使用unique_together属性,这不是很糟糕。
参考:
- http://comments.gmane.org/gmane.comp.python.django.devel/37301
- How to remove redundant ID field in auto-generated ManyToMany table in Django?
- https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys#Multi-ColumnPrimaryKeysupport
- https://code.djangoproject.com/ticket/373
像在SQL模式中表达默认值一样简单。我知道他们won't fix之所以会这样,但却让生活变得更艰难。
参考:
- https://code.djangoproject.com/ticket/470
无法声明固定字段
参考:
- https://code.djangoproject.com/ticket/9349
下行(引自上述错误报告):在我的特定应用程序中,从Django-autogenerated varchar字段更改为char字段会将数据库的大小从550GB减少到300GB。在许多情况下,确实存在需要存储的固定长度字符数据。
主键不能无符号(错误报告已经反复发布很长时间)
。这并不难实现。它将可用的ID加倍。
正如我所说,这只是一个开始。我遇到了一些缺点让我觉得如果Django忽略了这些基本的东西,它是否是正确的框架?我想问一下Django社区充满了需要破解其他简单内容的问题,还是只是少数例外?
我正在考虑尝试金字塔/ Pylons框架。任何帮助/建议将不胜感激。
更新:又增加了2个
答案 0 :(得分:4)
老实说,如果这些东西对你来说是阻挡剂,请不要使用Django。我是Django的强烈支持者,但是如果你觉得它不能满足你的需求,你应该选择别的东西。
我必须说,这些是奇怪的事情要注意。我无法想象为什么中间M2M表上的额外主键字段会成为问题。 (请注意,复合字段 - 包括PKs - 已成为今年夏季代码项目的主题,并准备合并 - 请参阅https://groups.google.com/forum/#!topic/django-developers/CD7OrkJ63zc)
同样,为什么缺乏SQL级别的默认值“让生活变得更难”很难理解:如果你通过Django的ORM做任何事情,那么应用默认值就没有区别;另外,正如Adrian在那张票上所说的那样,在SQL中执行它实际上会减少当前的功能,因为无法调用默认值。
另外你应该反思为什么你让这些相对微不足道的细节掩盖了Django给你的巨大好处:富有表现力的ORM,模板语言,蓬勃发展的社区,大量的第三方应用程序......但是,即便如此说如果它真的不适合你,你可以再次选择别的东西。