也许我的问题有些幼稚。 django模型通常定义如下:
class DummyModel(models.Model):
field1 = models.CharField()
field2 = models.CharField()
根据我的理解,field1和field2是在类级别而不是实例级别定义的。因此,不同的实例将共享相同的字段值。考虑到Web应用程序应该是线程安全的,这怎么可能呢?我在python学习曲线中遗漏了什么?
答案 0 :(得分:2)
您是正确的,通常在类级别声明的属性将在实例之间共享。但是,Django使用一些涉及元类的聪明代码来允许每个实例具有不同的值。如果你对如何做到这一点感兴趣,Marty Alchin的书Pro Django有一个很好的解释 - 或者你可以阅读代码。
答案 1 :(得分:0)
将您定义的模型视为规范。你指定了你想要的字段,当Django给你一个实例时,它已经使用你的规范来构建一个看起来完全不同的完全不同的对象。
例如,
field1 = models.CharField()
当你为field1分配一个值时,比如'我是一个字段',你不觉得你可以将一个字符串分配给一个应该是'CharField'的字段是不是很奇怪?但是当你保存那个实例时,一切仍然有效吗?
Django看着CharField,说“这应该是一个字符串”,然后交给你。当你保存它时,Django会根据你给出的规范检查该值,并在它有效时保存它。
当然,这是一个非常简单的视图,但它应突出显示定义模型与您使用的实际实例之间的区别。