运维开发笔记整理-Django模型语法

                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.模型基本概念

1>.什么是模型

  模型是你的数据唯一的,权威的信息源。它包含你所存储数据的必要字段和行为。每个模型对应数据库中唯一的一张表。它包含你所存储数据的必要字段和行为。每个模型对应数据库中唯一的一张表。

2>.如何编写模型

  模型:每个模型都用一个类表示,该类继承自“django.db.models.Model”。每个模型有多个类的属性变量,而每一个类的属性变量又都代表类数据库表中的一个字段。

  字段:每个字段通过Field类的一个实例表示,例如字符字段CharField和日期字段DataTimeField。这种方法告诉Django每个字段保存着什么类型的数据。(偷偷告诉你,Django支持的模型字段比数据库本身的字段要支持的多,比如MySQL的varchar类型,就被Django封装成了不同的模型字段,比如EmailField)。

  字段名:每个Field实例的名字(例如username)就是字段的名字,并且是机器刻度的格式。你将在Python代码中使用它的值,并且你的数据库把它为表的列名。

3>.模型字段类型

  模型字段类型又很多,比如CharField,BooleanFielld,IntegerField,DateField/DateTimeField,EmailField,TextField,TimeField等等,更多字段类型(Field-types)可参考Django组建的官方地址:https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types

4>.自增主键字段

  默认情况下Django会给每个模型添加下面这个字段。

id = models.AutoField(primary_key=True)

  如果Django看到你显示设置了Field.primary_key,就不会自动添加id列。

  每个模型只能有一个字段指定primary_key=True(无论是显示声明还是自动添加)。

5>.字段的自述名

  每个字段类型都接受一个可选的位置参数,字段的自述名,如果没有给定自述名,Django将根据字段的属性名称自动创建自述名,将属性名称的下划线替换成空格。

  ForeignKey,ManyToManyField和OneToOneField这三个可以使用verbose_name指定自述名。

#例如:自述名为:"person's first name"
first_name = models.CharField("person's first name", max_length=30)


#例如:自述名为:"first name"
first_name = models.CharField(max_length=30)

6>.字段选项

  每个字段有一个也有的参数,例如,CharField(和它的派生类)需要max_length参数来指定VARCHAR数据库字段的大小。

  null:

    如果为True,Django将用NULL来在数据库中存储空值,默认值是False。

  blank:

    如果为True,该字段允许不填,默认值是False。null是纯数据库范畴,而blank是数据验证范畴的,blank=True,表单验证允许为空,blank=False,该字段就是必须的。

  choices:

    由二元组组成的一个可迭代对象(如列表或元组),用来给字段提供选择项,如果设置了choices,默认的表单将是一个选择框,选择框的选择就是choices中的选项。

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
)

  defaulat:

    字段的默认值,可以是一个值或者调用对象。

  primary_key:

    如果为True,那么这个字段就是模型的主键。

  unique:

    如果改值设置为True,这个字段的值在整张表中必须是唯一的。

  更多关于Field字段选项可参考官方链接:https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-options

7>.模型meta选项

  使用内部的class Meta定义模型的元数据,例如:

from django.db import models
class User(models.Model):
    username = models.IntegerField()
    class Meta:
        ordering = ["username"]

  模型元数据是“任何不是字段的数据”,比如排序选项(ordering),数据库表名(tb_table)。在模型中添加class Meta是完全可选的,所有选项都不是必须的。更多文档可参考官方链接:https://docs.djangoproject.com/en/1.11/ref/models/options/

   db_table:

    db_table是用于指定自定义数据库表名的。Django有一套默认的按照一定规则生成数据模型对应的数据库表名,如果你想使用自定义的表名,就通过这个属性执行。

    若不提供该参数,Django会使用app_label + '_' + module_name作为表的名字。

class Meta:
    db_table = 'server’ 

    Django会根据模型类的名称和包含它的应用的名称自动指定数据库表名称。一个模型数据库表名称,由这个模型的“应用名”和模型名称之间加上下划线组成。

    使用Meta类中的db_table参数来重写数据表的名称。

    当你通过db_table覆写表名称时,强烈推荐使用小字母给表命名。

  order:

    这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的

class Meta:
    ordering = ['-order_date']

    它是一个字符串的猎豹或元组。每个字符串是一个字段名,前面带有可选的“-”前缀表示倒叙。前面没有“-”表示正序。使用“?”来表示随机排序。

ordering=['order_date'] # 按订单升序排列
ordering=['-order_date'] # 按订单降序排列,-表示降序
ordering=['?order_date'] # 随机排序,?表示随机
ordering = ['-pub_date', 'author'] # 对 pub_date 降序,然后对 author 升序

  app_label:

    app_label这个选项只在一种情况下使用,就是你的模型类不在默认的程序包下models.py文件中,这时候你需要指定你这个模型属于哪个应用程序。

class Meta:
    app_label='myapp'

  get_latest_by:

    由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果你的数据模型中有DataField或DateTimeField类型的字段,你可以通过这个选项来指定lastest()是按照哪个字段进行选取的。

    一个DataField或DateTimeField字段的名称,若提供该选项,该模块将拥有一个get_lastest()函数以得到“最新的”对象(依据那个字段):

class Meta:
    get_latest_by = "order_date"

  verbose_name:

    verbose_name的意思很艰难,就是给你的模型类起一个更可读的名字,代码如下:

class Meta:
verbose_name = "Jason"

  managed:

    由于Django会自动根据类型生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。

    默认值为True,这个选项为True时Django可以对数据库表进行migrate或migrations,删除等操作。在这个时间Django将管理数据库中表的声明周期。

    如果为False的时候,不户籍对数据库表进行创建,删除等操作。可以用于现有表,数据库视图等,其他操作是一样的。

 

二.编写IDC模型

1>.编写对应的数据库模型

#!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/

from django.db import models

class IDC(models.Model):
    name        = models.CharField("机房名称",max_length=32)
    address     = models.CharField("机房地址",max_length=200)
    phone       = models.CharField("机房联系电话",max_length=15)
    email       = models.EmailField("邮件地址",default="")
    letter      = models.CharField("机房地址缩写名称",max_length=5)
    
    class Meta:
        db_table = "idc"

2>.数据库迁移命令

C:\Users\yinzhengjie\softwares\GitHub\DevOps>python manage.py makemigrations
Migrations for 'dashboard':
  dashboard\migrations\0001_initial.py
    - Create model IDC

C:\Users\yinzhengjie\softwares\GitHub\DevOps>
负责基于你的模型修改创建一个新的迁移,并把这个迁移记录到本地的当前项目中一个叫migrations目录(python manage.py makemigrations)

相关文章:

  • 2021-11-11
  • 2021-11-23
  • 2021-08-14
  • 2021-07-31
  • 2021-09-26
  • 2021-06-05
  • 2021-07-12
  • 2022-01-10
猜你喜欢
  • 2021-08-03
  • 2021-05-20
  • 2021-08-03
  • 2021-09-11
  • 2021-06-15
  • 2022-01-02
相关资源
相似解决方案