模型
model:对象映射到SQL的表.每个属性对应表中的列.属性都是Field的子类. CharField:定长 TextField:无线长 EmailField:里面自己有判断是否为合法的Email格式 URLField:里面自己有判断是否为合法的URL格式 IPAddressField:里面自己有判断是否为合法的ip格式 BooleanField:只能存储True和False NullBooleanField:不知道是否存储True,False时. FileField:只能在数据库存放一个路径.从浏览器上传文件,并将存放在服务器. AutoField:一个自增的整数 Field里面的参数:(null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。 blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体) Model字段: Field.null:可以在数据库中存储空值NULL,默认为Fasle.空字符串值总是在数据库中存储为空字符串,而不是NULL。只有像整数、布尔和日期等非字符串字段才使用null=True。其他设置blank=true.null参数影响数据库存储.字符串字段(TextField,CharField,基于字段null=True,意味着他有可能空值:NULL,空字符串).BooleanField字符串接受NULL,可以使用NullBooleanField代替.{是与数据库有关} Field.blank:如果为True,允许该字段为空白.默认为False,则表单验证时必须输入值.{与验证有关} Field.db_column:使用此字段的数据库列名,没给出Django会使用字段的名称. Field.db_index:如果为True,django-admin.py sqlindexes 命令将为该字段输出CREATE INDEX 语句。 Field.db_tablespace:如果该字段索引数据库表空间的名字,则使用此字段的索引。默认是项目的 DEFAULT_INDEX_TABLESPACE 设置,如果设置或模型有db_tablespace。如果后端不支持用于索引的表空间,则忽略此选项。 Field.default:字段的默认值。可以是一个值也可以是可调用对象。 如果是调用,则每次都将创建一个新的对象。默认值不能是一个可变对象(模型实例,列表,集合等) Field.editable:如果为 False,将不会被显示在管理员或任何其他 ModelForm。默认值是true。 Field.error_messages:error_messages 参数让你可以覆盖默认的消息。通过字典中的键匹配你想要覆盖的错误消息。错误消息的键包括null, blank, invalid, invalid_choice, 和 unique。 Field.help_text:用窗体控件显示的额外的“help”文本。这是非常有用的文档,即便你的字段上没有使用. Field.primary_key:如果为True,这个字段是该模型的主键。如果你不为你模型中的任何字段指定primary_key=True,Django将自动添加自增字段 AutoField作为主键。所以,你不需要设置任何字段为primary_key=True,除非你想覆盖默认的主键。 Field.unique:如果为True,则该字段必须是整个表中唯一的。这是强制在数据库和模型上的验证,当unique 为 True时,你不需要指定db_index,因为unique暗示创建索引。 Field.unique_for_date:要求在某个日期内,该字段值在数据表中是唯一的(就不存在时期和字段值都相同的记录),那就可以将 unique_for_date 设置为某个 DateField 或 DateTimeField 的名称。 Field.unique_for_month: Field.unique_for_year: Field.verbose_name: 字段类型: AutoField BigIntegerField BooleanField CharField TextField CommaSeparatedIntegerField DateField DateField.auto_now:每一次保存对象时,Django 都会自动将该字段的值设置为当前时间。 DateField.auto_now_add:在第一次创建对象时,Django 自动将该字段的值设置为当前时间,一般用来表示对象创建时间 DateTimeField:利用 datetime.datetime 实例表示日期和时间 DecimalField:使用Decimal 实例表示固定精度的十进制数的字段 DecimalField.max_digits:数字允许的最大位数 DecimalField.decimal_places:小数的最大位数 FileField:字段不支持 primary_key 和 unique 参数,否则会抛出 TypeError 异常。upload_to 用于保存文件的本地文件系统。创建一个目录,用来存放上传的文件.instance定义了当前FileField的model实例。更准确地说,就是以该文件为附件的model实例.filename 上传文件的原始名称。在生成最终路径的时候,有可能会用到它。FileField.storage 负责保存和获取文件的对象 EmailField ImageField IPAddressField GenericIPAddressField 多对多关系:ManyToManyField().关系对称. (symmerteical = False改变对称关系)(through可以手动管理中间表) 一对一关系:OneToOneField() (limit_choice_to:接收一个字典) 模型继承:抽象继承,多表继承 抽象继承:在子类中会继承父类的Meta,或是和父类的Meta合并.并将里面的abstract=False class A(models.Model): ....... class Meta: abstract = True //则把这个类定义为抽象的类 Meta类主要用来处理关于模型的各种元数据的使用和显示. 多表继承:父类拥有自己数据表的完整Django模型,可以正常实例化.自己的属性子类也可以使用.自动在子类和父类之间设置一个OneToOneField,所以子类才能继承父类的属性. class A(models.Model): ...... class B(A): ...... B的实例会得到a_ptr属性会指向和他们组合的A实力 manage.py:创建和更新数据库 python manage.py syncdb:保证所有的模型都有对应的数据表. sql:显示createtable调用 sqlall:从sql文件中v初始化数据载入语句 sqlindexs:显示对主键创建索引的调用 sqlclear:显示drop table调用 sqlcustom:指定sql文件里面的自定义sql语句 sqlreset:sqlclear和sql的组合 loaddata:载入初始化数据 dumpdata:把现有的数据库里的数据输出为json,xml格式 查询数据库:Manager和QuerySet Manager,有一个objects属性. all():返回一个包含模式里所有数据库的QuerySet.相当于select * from filter():返回一个包含符合制定条件的QuerySet exclude:和filter()相反,查询不符合条件的记录 get():获得单个符合条件的记录 QuerySet相当于一个列表.可以执行迭代,切片,索引,获取长度 查询结果进行排序:order_by() 输查询结果前几个数:[:num] 其他查询:value,value_list,select_related()--实际上是一个就join操作 extra()调整SQL 参数: select:修改SELECT语句 where:提供额外的where子句 tables:提供额外的表 params:安全替换动态的参数 class Meta: 里面的可选参数: ordering = ['pub_date'] 按字符串进行升序排序 ['-pub_date','string']降序排序.可以有多个排序的字符串 permissions:要创建一个对象所需要的额外的权限. ..... __unicode__(self):返回一个Unicode对象.当object调用unicode()时被调用的.Django的数据库后端会返回Unicode字符串给model属性 __str__(self)__:返回一个String对象.当object调用str()时应该返回的值 如果定义了__unicode__()方法但是没有定义__str__()方法,Django会自动提供一个__str__()方法调用__unicode__()方法,然后把结果转换为UTF-8编码的字符串对象。在实际开发中,建议:只定义__unicode__()方法,需要的话让Django来处理字符串对象的转换。 @permalink # permalink 在模板上解析地址比url函数要精简的多-能更好的防止硬编码,而且也是比较隐含的函数,它比url函数更高级点。 admin.py: admin.site.register() # 告诉管理站点Photo对象要有一个管理界面 ModelAdmin: --模型管理 list_display=(元组) 制定要显示的字段 search_fields=(元组) 指定要搜索的字段,将会出现一个搜索框让管理员搜索关键词 list_filter=(元组) 指定列表过滤器,右边将会出现一个快捷的日期过滤选项, date_hierarchy='str' 日期型字段进行层次划分。 ordering=(元组) 排序 fields=(元组) 自定义编辑表单,在编辑表单的时候 显示哪些字段,显示的属性 fieldsets = (('str',{'fields':(元组)}),('str',{'fields':(元组),'classes':['collapse']})) 分组表单.'classes'的属性'collapsed'设置为可折叠.monospace,可以用于HTML的textarea显示代码.wide:让fieldset在admin里获得更大的宽度.fields指定一组要在admin里面显示在一起的变量名.选项里的字典有标注字符串的话,就会被当作该组的标题.否则该组就不显示任何标题. filter_horizontal=(元组) 拥有十个以上选项的`` 多对多字段` 控件都是垂直排列 filter_vertical=(元组):控件都是垂直排列.只能用在多对多字段 上, 而不能用于 ForeignKey字段。 model= 某个类 StackedInline: -层叠串联.定义内联对象 inlines = [ChoiceInline] 定义子对象的引用 TabularInline:横排显示