模型

 

 

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:横排显示
    

 

转载于:https://www.cnblogs.com/lcpholdon/p/4975942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值