====== 模型 ====== .. module:: django.db.models 一个模型(model)是单一的,与数据库相关的数据源。它包含了存储数据必需的字段和行为。一般情况下,每个模型映射一个单独的数据库表。 基础知识: * 每个模型是 :class:`django.db.models.Model` 的一个Python子类。 * 该模型的每个属性都代表一个数据库字段。 * 有了这一切,Django给你自动生成数据库的访问API;详见 :doc:`/topics/db/queries`。 例子 ============= 这个模型例子定义一个 ``Person`` ,其中包含 ``first_name`` 和 ``last_name`` 两个字段:: from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) ``first_name`` 和 ``last_name`` 是模型的字段 fields_ 。 每个字段被指定为一个类的属性, 每个属性映射到一个数据库列。 上面 ``Person`` 的模型将会创建如下的数据表: .. code-block:: sql CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL ); 一些技术说明: * 数据表名 ``myapp_person`` 是根据模型的元数据生成,但可以进行自定义。详见表名 :ref:`table-names` 了解更多 * ``id`` 字段是自动添加的,但这一行为也可以被覆盖,详见:自动主键字段 :ref:`automatic-primary-key-fields` 。 * 在这个例子中 ``CREATE TABLE`` 的SQL语句使用的是PostgreSQL的语法格式,但值得注意的是,Django将根据你 设置文件 :doc:`settings file ` 中指定的数据库后端生成相应的SQL语句。 使用模型 ============ 一旦你定义好你的模型,你需要告诉Django你将要使用这些模型。这可以通过编辑您设置文件settings, 在 :setting:`INSTALLED_APPS` 添加该模型所在模块的名称。 例如,如果你应用的模型在 ``myapp.models`` 模块中(应用的包结构是通过 :djadmin:`manage.py startapp ` 创建), 那么 :setting:`INSTALLED_APPS` 添加的部分内容如下:: INSTALLED_APPS = ( #... 'myapp', #... ) 当你向 :setting:`INSTALLED_APPS` 中添加了内容,那么必须运行 :djadmin:`manage.py syncdb ` 更新数据库结构。 字段 ====== 模型最重要也是最需要的就是自定义的数据库字段列表。字段是该类的特殊属性。 不要选择与 :doc:`models API ` 冲突的名字命名字段。 例如: ``clean`` , ``save`` , ``delete`` 例子:: class Musician(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) instrument = models.CharField(max_length=100) class Album(models.Model): artist = models.ForeignKey(Musician) name = models.CharField(max_length=100) release_date = models.DateField() num_stars = models.IntegerField() 字段类型 ----------- 模型中的每个字段都是相应字段类型 :class:`~django.db.models.Field` 的实例。Django使用该字段类型确定一些事情。 * 数据库的字段类型(如: ``INTEGER``, ``VARCHAR`` ). * 用于渲染表单字段的小部件 :doc:`widget ` (如: ````, ``