简单示例
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
使用模型
django 1.8是直接在install_app里面添加app的名字即可
INSTALLED_APPS = (
#...
'myapp',
#...
)
django2.0之后会在应用文件夹下生成一个apps.py,里面有应用的配置类,注册需要添加该配置类
INSTALLED_APPS = (
#...
'myapp.apps.MyappConfig',
#...
)
字段选项
null
指定数据库存储空值的方式,是数据库范畴
如果为True,Django 将会把数据库中空值保存为NULL。默认值是 False.
为False,字符串字段存储为空字符,整数存储为0,布尔存储为False,时间存储为zero
blank
指定输入字段是否为空.
如果为True,该字段允许为空值,默认为False。
要注意,这与null不同。null纯粹是数据库范畴,指数据库中字段内容是否允许为空,而 blank是表单数据输入验证范畴的。
如果一个字段的blank=True,表单的验证将允许输入一个空值。如果字段的blank=False,该字段就是必填的
choise
由二项元组构成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,
默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。
YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
)
from django.db import models
class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
每个元组中的第一个元素,是存储在数据库中的值;第二个元素是在管理界面或 ModelChoiceField 中用作显示的内容。
在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,
就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。例如:
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'
default
字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每个新对象被创建它都会被调用。
help_text
表单部件额外显示的帮助内容。即使字段不在表单中使用,它对生成文档也很有用。
primary_key
如果为True,那么这个字段就是模型的主键
如果你没有指定任何一个字段为主键,django会自动生成一个主键字段
from django.db import models
class Fruit(models.Model):
name = models.CharField(max_length=100, primary_key=True)
主键字段是只读的。如果你在一个已存在的对象上面更改主键的值并且保存,一个新的对象将会在原有对象之外创建出来。
>>> fruit = Fruit.objects.create(name='Apple')
>>> fruit.name = 'Pear'
>>> fruit.save()
>>> Fruit.objects.values_list('name', flat=True)
['Apple', 'Pear']
unique
如果该值设置为 True, 这个字段中的每个数据在整张表中都必须是唯一的,即数据库中这列的数据不允许出现重复
注意外键字段ForeignKey和文件字段FileFiled不可以使用该属性
当使用了unique属性之后,相当于给这列创建了数据库索引
unique_for_date
例如,你有一个title 字段设置unique_for_date="pub_date",那么Django 将不允许两个记录具有相同的title 和pub_date。
verbose_name
字段的自述名
如果没有给定自述名,Django 将根据字段的属性名称自动创建自述名 —— 将属性名称的下划线替换成空格。
poll = models.ForeignKey(Poll, verbose_name="the related poll")