Python Django';s的模型字段是在类级别定义的吗?

Python Django';s的模型字段是在类级别定义的吗?,python,django,model,field,Python,Django,Model,Field,也许我的问题有点幼稚。django模型通常定义如下: class DummyModel(models.Model): field1 = models.CharField() field2 = models.CharField() 据我所知,field1和field2是在类级别而不是实例级别上定义的。因此,不同的实例将共享相同的字段值。考虑到web应用程序应该是线程安全的,这怎么可能呢?我的python学习曲线中缺少了什么吗?您是正确的,通常在类级别声明的属性将在实例之间共享。然

也许我的问题有点幼稚。django模型通常定义如下:

class DummyModel(models.Model):
    field1 = models.CharField()
    field2 = models.CharField()

据我所知,field1和field2是在类级别而不是实例级别上定义的。因此,不同的实例将共享相同的字段值。考虑到web应用程序应该是线程安全的,这怎么可能呢?我的python学习曲线中缺少了什么吗?

您是正确的,通常在类级别声明的属性将在实例之间共享。然而,Django使用一些涉及元类的聪明代码来允许每个实例具有不同的值。如果您对如何实现这一点感兴趣,Marty Alchin的书Pro Django有一个很好的解释——或者您可以阅读代码。

想想您定义为规范的模型。指定所需的字段,当Django将实例交还给您时,它已使用您的规范为您构建了一个外观相同的完全不同的对象

比如说,

field1 = models.CharField()
当你给field1赋值时,比如“我是一个field”,你不觉得给一个应该是“CharField”的字段赋值很奇怪吗?但是,当您保存该实例时,一切仍然有效

Django看着CharField,说“这应该是一个字符串”,然后把它交给你。保存时,Django根据给定的规范检查该值,如果该值有效,则保存该值


当然,这是一个非常简单的观点,但它应该强调定义模型和实际使用实例之间的区别。

感谢您的提问,Python知识贫乏的Django开发人员(像我一样)通常不会考虑这种不规则现象。希望这只是一个讽刺:)。我知道程序员通常有潜力成为喜剧演员,因为我们都有黑色幽默感。谢谢,你的解释很有道理。我想这比简单地给出一个想法更难实现。就我所知,我不知道怎么做。感谢才华横溢的人(Django团队),他们为我们节省了很多时间。衷心同意。Django及其所有支持的实用程序都是非常出色的作品,使用起来非常愉快。