gpt4 book ai didi

python - Django 模型字段如何工作?

转载 作者:太空狗 更新时间:2023-10-29 18:17:07 25 4
gpt4 key购买 nike

首先,我不喜欢网络编程。我碰到了 django 并阅读了一些关于模型的内容。我对以下代码(来自 djangoproject.com)很感兴趣:


class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)

def __str__(self):
# Note use of django.utils.encoding.smart_str() here because
# first_name and last_name will be unicode strings.
return smart_str('%s %s' % (self.first_name, self.last_name))

根据我对 python 的理解,first_name 和 last_name 是类变量,对吗?它是如何在代码中使用的(因为我猜想设置 Person.first_name 或 Person.last_name 会影响所有 Person 实例)?为什么这样使用?

最佳答案

你的问题的本质是“这些类变量(我将 Field 对象分配给它们)怎么会突然变成 Django 的 ORM 中的实例变量(我将数据分配给它)”?答案是 Python 的魔力 metaclasses .

元类允许您 Hook 并修改创建 Python 类的过程(不是创建该类的实例,而是创建类本身)。

Django 的模型对象(因此还有您的模型,它们是子类)有一个 ModelBase metaclass .它会查看模型的所有类属性,并将任何属于 Field 子类的实例移至字段列表中。该列表被指定为 _meta 对象的一个​​属性,它是模型的一个类属性。因此,您始终可以通过 MyModel._meta.fieldsMyModel._meta.get_field('field_name') 获取实际的 Field 对象。

Model.__init__ 方法随后能够使用 _meta.fields 列表来确定在创建模型实例时应初始化哪些实例属性。

不要害怕深入研究 Django 源代码;这是一个很好的教育资源!

关于python - Django 模型字段如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/500650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com