django 中Model一些笔记--收藏
来源:互联网 发布:airbnb 代订陷阱 淘宝 编辑:程序博客网 时间:2024/05/17 08:55
今天晚上看了一下Django文档的model部分,简要翻译一下,以备后用:
原文地址:
http://docs.djangoproject.com/en/dev/topics/db/models/
定义一个Model
每一个model必须是django.db.models.Model的一个子类
每个字段被定义为一个类的属性,每个属性对应数据库表的一个字段
- from django.db import models<br>class Person(models.Model):<br> first_name = models.CharField(max_length=30)<br> last_name = models.CharField(max_length=30)<br><br>对应下面的sql:<br>CREATE TABLE myapp_person (<br> "id" serial NOT NULL PRIMARY KEY,<br> "first_name" varchar(30) NOT NULL,<br> "last_name" varchar(30) NOT NULL<br>);
默认情况下,Django会在model名的前面加上你的“应用的名称_”作为数据库表的名称。
比如你的应用是polls,定一个了一个model叫做Person,那么数据库表的名称是polls_person
默认情况下,Django汇给你自动增加一个叫做id的字段,并设置这个字段为主键。
使用Model
当定义了Model之后,你需要告诉Django去使用这些models,
修改settings.py中的INSTALLED_APPS属性,增加包含models.py的模块名称即可。
比如你的models.py文件的路径是 mysite.myapp.models.py那么只需要这样写即可:
- INSTALLED_APPS = (<br> #...<br> 'mysite.myapp',<br> #...<br>)
注意:如果你在settings.py的INSTALLED_APPS中添加了新的app,需要重新运行manage.py syncdb命令
字段类型
在model中的每一个字段都必须是Field类的一个实例。Django使用字段类型确定下面几件事情:
1、数据库字段的类型
2、在admin界面中使用的html组建,比如是文本框,还是单选框等。
3、必填项验证。
字段选项
每一个字段都有一些参数,比如CharField字段有一个max-length的参数,表示字段类型的长度。
Django定义了一些所有字段(类)都有的公共的参数,下面简单的总结一下他们的使用:
null
如果是True,Django会在数据库中将此字段的值置为NULL,默认值是False
blank
如果是True,那么这个字段是可以不填的。默认是False
blank和null的区别:null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的。
如果blank=False,那么这个字段就是必填的。
choices
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this field. If this is given, Django's admin will use a select box instead of the standard text field and will limit choices to the choices given.
一个二维的元组被用作choices,如果这样定义,Django会select box代替普通的文本框,
并且限定choices的值是元组中的值
- YEAR_IN_SCHOOL_CHOICES = (<br> ('FR', 'Freshman'),<br> ('SO', 'Sophomore'),<br> ('JR', 'Junior'),<br> ('SR', 'Senior'),<br> ('GR', 'Graduate'),<br>)
default:
可以设置字段的默认值,它可以是一个普通的值,或者是一个可以调用(callable)的对象,如果是一个callable的对象,那么每次调用的时候都会创建一个新的对象。
primary_key:
如果是True,那么这个字段就是这个表的主键。
如果在model的字段上没有定义primary_key=True,那么Django会自动添加一个IntegerField(id)类型的字段,作为主键。所以一般情况下你不需要设置这个属性,除非你不想使用默认的设置。
unique
如果Ture,设定字段的值是唯一的。
Automatic primary key fields
默认情况下,Django会自动为每一个model定义如下字段:
- id = models.AutoField(primary_key=True)
这是一个自增长的主键
你可以在任何一个字段上设置primary_key=True,如果Django发现你定义了这个属性,他就不会自动添加id字段了
Verbose field names
除了ForeignKey,ManyToManyField,OneToOneField外,每一个field类型的第一个参数,是一个可选参数 -Verbose field names。如果没有这个参数,Django会自动的按照字段的名称创建一个。两个单词之间会用空格分割。
verbose name 是Person's first name
- first_name = models.CharField("Person's first name", max_length=30)
verbose name是 first name
- first_name = models.CharField(max_length=30)
ForeignKey, ManyToManyField and OneToOneField 要求第一个字段必须是一个model class,所以你可以使用
关键字参数定义verbose name:
- poll = models.ForeignKey(Poll, verbose_name="the related poll")<br>sites = models.ManyToManyField(Site, verbose_name="list of sites")<br>place = models.OneToOneField(Place, verbose_name="related place")
这里约定verbose name的第一个字母不要大写。Django会在需要的时候,自动转化为大写。
Relationships
Django定一个三种通用的类型,去描述数据库表之间的关系:
many-to-one, many-to-many and one-to-one.
Many-to-one relationships:
使用ForeignKey来定一个Many-to-one的关联关系。就像使用普通的Field一样。
ForeignKey的第一个参数必须定义这个model与哪一个model关联
比如,Car model有一个Manufacturer:一个制造厂(one)可以生产很多汽车(Many),但是一个汽车只能有一个制造厂
- class Manufacturer(models.Model):<br> # ...<br><br>class Car(models.Model):<br> #一个汽车只能有一个制造厂<br> manufacturer = models.ForeignKey(Manufacturer)<br> # ...
未完待续......
- django 中Model一些笔记--收藏
- django 中Model一些笔记--收藏
- django入门笔记5- model
- django中创建一个Model
- django中创建一个Model
- django model postgis的一些操作
- Django笔记教程:三、Model进阶
- Django笔记 Model的继承和操作
- django中model的书写规范
- django中model的unicode函数
- 获取django model 中得fields
- Django中Model,Template,View 基本概念
- django在Model中修改表名
- Django中model的字段类型
- Django中model.py定义类
- Django中model.py重写user
- Django model
- Django model
- 实验三:栈和队列
- spring3,springMVC,Hibernate4整合开发
- Pascal Triangle
- uva 10534(最长上升子序列O(nlogn))
- MySQL获取刚插入的数据
- django 中Model一些笔记--收藏
- Sql Server2005数据库在还原时出现如下错误信息:
- struts2 action重定向
- Eight Docker Development Patterns
- 判断用户是否第一次使用软件版本
- 1011. World Cup Betting (20)
- 查分约束系统详解
- linux创建root账户
- android本地图片选择(相册选取,相机拍摄)