- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在看
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
这是取自 djangobook.com 的示例,我对 models.Model 参数的内容感到困惑。我知道 models 是一个具有 CharField() 等方法的类,它被继承到这些类中以便创建表列......对吗?但是模型的“模型”部分在哪里呢?这是为了什么?哪里需要它?
您提供的任何类比或解释将不胜感激,因为我一直在互联网上查找,但仍然感到困惑。很抱歉提出了一个无知的问题。
谢谢!
最佳答案
I get that models is a class with methods such as CharField(), which is being inherited into these classes in order to create table columns...right?
我相信你在阿尔伯克基转错了方向。小写的 models
不是一个类,CharField()
也不是一个方法,尽管它最终调用了一个名为 __init__()
的特定方法,但是我们稍后会讨论这个问题。
首先看一下import语句:
from django.db import models
小写models
这里是一个包,意味着它是一个包含__init__.py
文件的目录。具体来说,它是db
包的子包,而db
包本身又是django
包的子包。 Python 点路径与包目录结构平行。
这里值得注意的是,models
不是一个模块,尽管它可以是一个模块。如果 db
包中有一个名为 models.py
的 Python 文件,那么 models
将是一个模块。我们如何确定?通过仔细阅读Django源代码,我们发现它是一个目录,因此也是一个包。 See the source code here 。
因此,包是包含以下内容的目录:其他目录(子包)或 python 文件(模块)。类定义在模块中定义。好的,那么如果是包而不是模块,那么如何从 models
导入 Model
类呢?
这是可能的,因为 models
包中的 __init__.py
文件导入了 Model
类。 Model
类定义实际上位于 base
模块中,是的 models
包中的 base.py
文件。
现在,介绍 CharField()
。在Python中,类实例化使用函数表示法。定义自定义 Model
类时,数据库字段是根据模型的类属性创建的。在 Book
模型中,title
是一个类属性,从 CharField
类实例化。实例化时,将调用 CharField
方法 __init__()
。
这里是一个很好的地方,可以指出为什么使用包来使导入更加方便。 CharField
类是在 models
包的 fields
子包中定义的,Django 的许多其他字段类也在那里定义。与 models
包中的 __init__.py
如何从 base
子模块导入 Model
类类似,它还从 fields
子模块导入所有字段。
由于 models
包负责我们可能需要使用的所有子导入,因此我们只需导入该包即可。使用 from
样式导入,我们可以轻松识别代码中使用该包中某些内容的所有位置,因为它始终具有点符号 models.Something
。我们不必担心所有这些东西在包中是如何组织的。
关于python - models.py 中的 models.Model 参数到底指的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18936784/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!