gpt4 book ai didi

python - 理解 Django 的模型类

转载 作者:行者123 更新时间:2023-12-01 04:57:47 25 4
gpt4 key购买 nike

我对 Python 和 Django 都很陌生,我正在尝试了解 Django 的模型类(以及一般类)的工作原理。

如果您创建一个新模型:

from django.db import models   

class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)

现在您可以执行以下操作:

>>> from myapp.models import Book
>>> book = Book(title="a new book", author="bob")
>>> book.save()
>>> print book.title
a new book

太棒了,它有效。但是Book类继承Model类的方式有点令人困惑。标题和作者似乎充当实例变量,但查看类定义,它们似乎是静态的。

from django.db import models 

class Book(models.Model):

def __init__(self, *args, **kwargs):
self.title = models.Charfield(max_length=200)
self.author = models.CharField(max_length=200)
super(Book, self).__init__()

对我来说,这似乎是声明类的更直观的方式,但是当我运行迁移时,Django 不会选择这些架构更改。我明白为什么这不起作用,我只是不确定我是否明白为什么上述方法有效

提前致谢。

最佳答案

这真的太复杂了,无法在这里回答。简单的回答是,这一切都是通过元类完成的,但要获得完整的解释,您应该阅读 Marty Alchin 的书 Pro Django

重点是,例如,您不希望 self.title 成为字段实例:您希望它是标题的任何是。因此,(相当简单)当从数据库构造模型实例时,元类会遍历类级 Field 属性,并为每个属性设置一个实例级属性为 db 列的值。当然,在保存时,它会执行相反的操作。

关于python - 理解 Django 的模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26983288/

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