模型语法变更
应大家的要求,我即将更改 Django 的模型语法,使用 "fieldname = FieldClass" 代替 "FieldClass('fieldname')"。这已经是一个长期存在的工单了。
此更改与之前版本不兼容,所以在更改您的模型之前,请不要 "svn update" 您的代码。旧的模型语法将无法工作。
对于这种与之前版本不兼容的情况,我深表歉意,但这仍然是非官方软件。 ;-) 一旦我们达到 1.0 版本——现在模型语法已经更改,这离我们更近了——我们将非常注重向后兼容性。
在 1.0 版本之前,我想不出我们还有什么其他的与之前版本不兼容的更改计划(敲木头)。如果这不是最后一个,那它至少是最后一个主要的更改。
这是一个新的语法的快速示例
class Foo(meta.Model): first_name = meta.CharField("The person's first name", maxlength=30) last_name = meta.CharField(maxlength=30) bar = meta.ForeignKey(Bar) sites = meta.ManyToManyField(Sites) class META: ordering = ('-bar',) admin = meta.Admin( fields = ( (None, {'fields': ('first_name', 'last_name', 'bar', 'sites')}), ), ) def __repr__(self): return self.first_name
请注意,所有非字段元数据都放在名为 "META" 的内部类中。
另请注意,ForeignKey、ManyToManyField 和 OneToOneField 现在需要显式名称(在示例中,即 "bar" 和 "sites")。之前,FK/MTM/OTO 字段的字段名称是可选的(作为快捷方式),这给人们带来了困惑——他们不知道如何在 "admin.fields" 中引用字段。现在它很明确了。
此更改应该非常稳定。在过去两天里,我一直将其在 World Online 的生产环境中进行测试。因此,我能够在问题出现时及时解决。此外,我还更新了每一个模型单元测试(以及模型示例),以使用新的语法,并且所有测试都通过了。
以下是更改模型所需了解的内容
- 关于更改的完整文档
- 一个讲解如何转换模型的视频教程(需要 Flash)
如果您有任何问题,请发送邮件到django-users 邮件列表 或访问 IRC。
我已经浏览了文档并尝试使用新语法进行更新。但我肯定错过了一些东西。如果您愿意,请查看一下我们的文档,如果您发现任何错误,请通过提交工单告知我们。
最后,我想公开感谢 mmarshall、rmunn、garthk、hugo、manuzhai 和所有其他为这次更改贡献补丁、想法和热情讨论的优秀人士。这是 Django 的第一个真正意义上的社区驱动型改进,看到它最终实现真是太棒了。谢谢你们!
返回顶部