免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3734 | 回复: 0

django学习之documentation [复制链接]

论坛徽章:
0
发表于 2009-11-17 23:21 |显示全部楼层

                               
               
               
                (注:以下文章是对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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP