Django的模型字段是在类级别定义的?

2024-04-26 03:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

也许我的问题有点幼稚。django模型通常是这样定义的:

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

根据我的理解,field1和field2是在类级别定义的,而不是实例级别。所以不同的实例将共享相同的字段值。考虑到web应用程序应该是线程安全的,这怎么可能呢?我是否在python学习曲线中遗漏了什么?在


Tags: django实例模型web应用程序model定义models
2条回答

想想你定义为规范的模型。您可以指定所需的字段,当Django将一个实例交还给您时,它已经使用您的规范构建了一个完全不同的、看起来相同的对象。在

例如

field1 = models.CharField()

当你给field1赋值时,比如“我是一个字段”,你不觉得奇怪的是你可以给一个应该是“CharField”的字段指定一个字符串吗?但是当你保存这个实例时,一切都还正常吗?在

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

当然,这是一个非常简单的视图,但是它应该突出定义模型和实际使用的实例之间的区别。在

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

相关问题 更多 >