- 论坛徽章:
- 0
|
(注:以下文章是对django官方网站的documentation部分内容的翻译,目的仅是个人学习之用,如对他人有些许帮助,不胜荣幸~)
Models
model是你的数据的唯一的,起决定作用的来源。它包含必要的字段和你要存储的数据的行为属性。通常,一个model对应一个database table。The basics:a. 一个model对应一个python类,该类继承于django.db.models.Modelb. model的每一个属性(attribute)代表一个数据库字段c. 通过所有的这些机制,Django给你提供了一个自动产生的database-access api,见Making queries.
Quick example:这个例子中的model定义了一个Person, 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是这个model的字段,每个字段被指定为类的一个属性,每个属性对应一个database column上述的Person model会创建一个以下的database table:
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
)
一些technical notes:a. 表的名字,myapp_person,是由model metadata自动衍生的,可以被overridden.b. id字段是自动添加的,但是这种行为可以被overriddenc. 例子中的"CREATE TABLE" sql语句用的是PostgreSQL语法,值得注意的是Django使用的sql语句与settings file中指定的后台数据库是一致的
Using models
当定义好models后,你需要告诉django你将要使用这些models.方法如下:编辑你的配置文件,修改INSTALLED_APPS来增加包含你的models.py文件的module例如,如果你的application的models在mysite.myapp.models模块下(这种application的包结构可以通过manage.py startapp脚本创建), INSTALLED_APPS应该如下:
INSTALLED_APPS = (
#...
'mysite.myapp',
#...
)
当你增加了新的apps到INSTALLED_APPS时,务必记得运行manage.py syncdb
Fields 字段一个model最重要的部分-----也是model唯一必需的部分----是其定义的数据库字段列表。而字段由类的属性指定。Example:
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()
Field types 字段类型:你的model中的每一个字段应该是某个特定的Field class的实例。Django通过field class types来确定一些事情:a. 数据库column type(e.g. INTEGER, VARCHAR)b. The widget to use in Django's admin interfacec. 最基本的validation requirements, 用于Django's admin和自动生成的表单中
Django带有很多built-in字段类型;在model field reference中你可以找到完整的列表。你可以定制自己的字段。
字段选项(Field options)每个字段有相应的字段相关的参数集。(见model field reference)。例如,CharField需要一个max_length参数,来指定用来存储数据的VARCHAR数据库字段的大小。有一些通用的参数集对所有的field types都适用。All are optional.以下是最常用的一些:nullIf True,Django会将空值作为NULL存在database中。Default is False.blankIf True,the field is allowed to be blank.注意:blank和null不同。null is purely database-related, blank is validation-related.如果一个字段设置blank=true,validation on Django's admin site允许空值输入。
choicesAn iterable(e.g.,a list or tuple) of 2-tuples to use as choices for the field. 如果有此参数,Django's admin会使用一个select box而不是standard text field并将值限制于指定的选项中。一个choices list看起来如下:
YEAR_IN_SCHOOL_CHOICES = (
(u'FR', u'Freshman'),
(u'SO', u'Sophomore'),
(u'JR', u'Junior'),
(u'SR', u'Senior'),
(u'GR', u'Graduate'),
)
在每个tuple中的第一个参数是存储在数据库中的值,第二个会显示在admin interface,或者在ModelChoiceField中。
defaulthelp_textprimary_key如果为True,该字段作为model的primary key.如果在model中任何一个fields都不是primary key,Django会自动增加一个IntegerField来保存primary key,所以你无须对某一个字段设置primary_key=True,除非你想override默认的primary-key behavior.unique如果为True,该字段在整个表中必须unique详情见common model field option reference.
自动主键字段(Antomatic primary key fields)默认,Django为每一个model以下字段:
id = models.AutoField(primary_key=True)
这是一个自增主键(auto-incrementing primary key)如果你要指定一个自定义主键,将该字段设置为primary_key=True。如果Django看到你显式的设置了Field primary key,它将不会增加自增id字段。每个model必须有exactly one字段设置为primary_key=True.
Verbose field names每一个字段类型,除了ForeignKey,ManyToManyField和OneToOneField,有一个可选的放在第一个位置的参数--a verbose name. 如果verbose name没有设置,Django会根据字段的attibute名字自动生成,并将下划线转为空格。下面这个例子中,the verbose name是"Person's first name":
first_name = models.CharField("Person's first name", max_length=30)
下面这个例子中,the verbose name是"first name":
first_name = models.CharField(max_length=30)
ForeignKey,ManyToManyField和OneToOneField第一个参数必须是model class,因此使用verbose_name关键字来设置参数。poll = models.ForeignKey(Poll, verbose_name="the related poll")sites = models.ManyToManyField(Site, verbose_name="list of sites")place = models.OneToOneField(Place, verbose_name="related place")
关系(Relationships)显然,关系数据库的优点在于建立数据库表彼此之间的关系。Django提供了方法来定义3中最常见的数据库关系:many-to-one, many-to-many, 和one-to-one多对一关系MANY-TO-ONE RELATIONSHIPS多对多关系MANY-TO-MANY RELATIONSHIPS一对一关系ONE-TO-ONE RELATIONSHIPS
(待续)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72694/showart_2097133.html |
|