【发布时间】:2021-03-18 00:01:00
【问题描述】:
如果我们如下创建一个新模型,
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="Matilda", author="Roald Dahl")
>>> book.save()
>>> print book.title
Matilda
但是,我在理解 Python 代码方面有点吃力 在类定义中,就我如何理解类的工作而言,并希望有人能提供帮助 我对以下问题的理解:
-
在类 Book 的定义中,title 似乎是一个 类属性。此类属性设置为 CharField 类?在这种情况下,当我们创建一个实例时 Book 类,如果我们不传入参数,将标题 是否设置为同一个 CharField 实例?
-
当我们在创建这个 Book 实例时传入 title='Matilda' 时,这是否会覆盖属性 title?
-
我们如何知道 Book 将标题作为参数?
我希望这些有意义。感谢您的任何帮助。 莉齐
【问题讨论】:
-
嗯,你是从
django.db.models.Model子类化的,这是一个复杂的类(参见来源:github.com/django/django/blob/master/django/db/models/…)。它旨在使用户体验易于定义您的模型以及如何使用它们。如果您想深入了解内部结构,无论如何都可以。 -
"在这种情况下,当我们创建 Book 类的实例时,如果我们不传入参数,标题会被设置为同一个 CharField 实例吗?" .不,Django 使用元类,并覆盖
__get__和__set__python 描述符。
标签: python django django-models python-class