Django学习记录(7)Django中的模型Model

Django-模型

基于ORM(对象关系映射)设计思想
ORM 解决的问题:
    1.表与类的关系
    2.记录和对象的关系
    3.字段和属性的关系

Django中的应用

应用相当于将项目进行模块化。方便项目的管理

Django新建一个应用

  • 在项目的虚拟环境中,终端输入python manage.py startapp 应用名
  • 此时,Django还不识别此应用,需要在项目文件的settings.py配置文件中激活应用
    `INSTALLED_APPS = [
        ‘应用名’
    ]
  • 在该应用下新建一个urls.py文件作为应用路由
from django.urls import path
from django.conf.urls import url

urlpatterns = [
	路由
]
  • 在项目路由中管理应用路由
    url(r'^项目路由/', include('应用.urls'))
  • 访问应用下的路由方式
    localhost/项目路由地址/应用路由地址

模型的定义

from django.db import models

# 必须继承models.Model父类
class Student(models.Model):
	pass

模型中常见的属性

  • TextField:等价于数据库中的longtext
  • CharFiled:等价于数据库中varchar
    • EmailField:等价于数据库中的varchar,但会自动校验格式
    • URLField:等价于数据库中的varchar,自动校验路由
    • FileField:等价于数据库中的varchar,可以做文件上传
    • UUIDField:等价于数据库中的varchar,32位长度的字符串
    • ImageField:等价于数据库中的varchar,用于存储图片

  • IntegerField:等价于数据库中的int/integer
    • AutoField:定义自动增长的属性,常用于设置主键
  • FloatField:等价于数据库中的float
  • DecimalField:等价于数据库中的decimal

  • DateField:等价于数据库中的date
  • DateTimeField:等价于数据库中的datetime

  • BinaryField:等价于数据库中的longblob,用于存储视频、音频等

  • OneToOneField:关联关系,一对一
  • ForeignerKeyField:关联关系,多对一
  • ManyToManyField:关联关系,多对多

属性类中常见的属性

  • verbose_name:影响后台站点的值,代表属性的名称
  • name:不掌握,用于给属性设置名字
  • primary_key:用于设置该属性是否是主键,默认为False,影响数据库的约束
  • max_length:设置属性的最大长度,一般在字符串中使用
  • unique:设置属性值是否唯一,影响数据库的约束
  • blank:默认值为False,代表非空,但并不影响数据库,只影响网页
  • null:默认值为False,代表非空,影响数据库的非空约束
  • default:用于设置默认值
  • editable:默认值为True,代表属性是否可编辑,是影响网页的属性
  • choices:设置可选项,有点类似于数据库的枚举enum,能够同时影响网页和数据库
  • help_text:属性的提示信息,影响网页
  • db_colum:用于设置数据库的字段名,默认值和属性名保持一致
  • auto_created:设置属性是否自动增长
  • validators:设置校验的规则
  • error_messages:页面校验失败的提示信息


    python部分源码
    def __init__(self, verbose_name=None, name=None, primary_key=False,
                 max_length=None, unique=False, blank=False, null=False,
                 db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
                 serialize=True, unique_for_date=None, unique_for_month=None,
                 unique_for_year=None, choices=None, help_text='', db_column=None,
                 db_tablespace=None, auto_created=False, validators=(),
                 error_messages=None):
 self.name = name
        self.verbose_name = verbose_name  # May be set by set_attributes_from_name
        self._verbose_name = verbose_name  # Store original for deconstruction
        self.primary_key = primary_key
        self.max_length, self._unique = max_length, unique
        self.blank, self.null = blank, null
        self.remote_field = rel
        self.is_relation = self.remote_field is not None
        self.default = default
        self.editable = editable
        self.serialize = serialize
        self.unique_for_date = unique_for_date
        self.unique_for_month = unique_for_month
        self.unique_for_year = unique_for_year
        if isinstance(choices, collections.abc.Iterator):
            choices = list(choices)
        self.choices = choices
        self.help_text = help_text
        self.db_index = db_index
        self.db_column = db_column
        self._db_tablespace = db_tablespace
        self.auto_created = auto_created

一些特殊的属性

日期Field类中的属性

  • auto_now:默认值是False,相当于数据库中的now(),代表是否使用当前系统时间,如果为True,则取数据库的当前时间

通过模型自动生成表

  1. 生成迁移文件
     终端中输入
    python manage.py makemigrations 应用名
  2. 可以查看迁移文件准备执行的命令(非必须执行)
    python manage.py sqlmigrate 应用名 migration_code
  3. 执行迁移文件
    python manage.py migrate 应用名
    如果不加应用名 django会自动执行所有的迁移文件

与数据库相关的改动,必须重新迁移,与网页相关的改动可以不迁移


数据库中表的名字默认的格式为:应用名_类名 `appName_className` 如果想修改表的名字,需要在该类中设置Meta元类,并设置db_table属性
class TestName(models.Model):
	name = models.CharField(max_length=50, verbose_name="测试名")
	 class Meta:
        db_table = 'new_name'

class Meta中还有一个属性managed,默认值为True,代表表的维护(创建,修改,删除)由迁移来完成,如果是False,代表表的维护由手动完成。
一般不更改,当项目完成时,将managed属性去掉。


通过表生成模型(逆向工程)

python manage.py inspectdb 表  >> 应用名/models.py

多个表用空格分隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值