一个模型包含了数据的字段和操作方法, 每个模型映射为一张数据库中的表
基本的原则
- 每个模型在Django中的存在形式为一个Python类
- 每个类都是django.db.models.Model的子类
- 模型的每个字段代表数据表的某一列
简单示例
person/models.py
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
相当于SQL语句
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
创建了模型之后, 需要在settings文件中注册models.py所在的myapp.
INSTALLED_APPS = [
#...
'myapp',
#...
]
模型的属性
_state
:_state
属性指向一个ModelState类实例, 它持续跟踪模型实例的生命周期._state
有2个属性 :adding
: 如果当前的模型实例还没有保存到数据库内, 则为True
, 否则为False
.- db: 一个字符串指向某个数据库, 当前模型实例是从该数据库中读取出来的.
- 对于一个新创建的模型实例:
adding=True
并且db=None
- 对于从某个数据库中读取出来的模型实例:
adding=False
并且db='数据库名'
>>> person = Person('mary', 's')
>>> person._state
<django.db.models.base.ModelState object at 0x0000020BECC1A088>
>>> person._state.adding
True
>>> person._state.db
模型方法
自定义模型方法
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
@property
def full_name(self):
return '%s %s' % (self.first_name, self.last_name)
full_name模型方法被python的属性装饰器转换成了一个类属性
使用模型方法
>>> from myapp.models import Person
>>> p = Person.objects.get(pk=1)
>>> p.full_name
'l sf'
>>>
Django内置模型方法
__str__()
: 用于返回实例对象的打印字符串
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.first_name + self.last_name
get_absolute_url()
: 返回每个模型实例的相应的访问url.