Django学习记录(7)Django中的模型Model
2020-07-03 17:18
453 查看
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,用于存储图片
-
AutoField:定义自动增长的属性,常用于设置主键
属性类中常见的属性
- 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,则取数据库的当前时间
通过模型自动生成表
- 生成迁移文件
终端中输入
python manage.py makemigrations 应用名
- 可以查看迁移文件准备执行的命令(非必须执行)
python manage.py sqlmigrate 应用名 migration_code
- 执行迁移文件
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
多个表用空格分隔
相关文章推荐
- Django学习记录--Django模型管理器类的使用
- django学习记录-模型继承
- django学习——Model模型中多对多外键如何查询
- django学习——model.py中重写user模型
- django学习之三:model模型创建
- Django学习记录(9)Django中的模型操作
- django模型manager学习记录
- django学习记录-django-1.5中简单地自定义自己的用户模型
- Django学习07---model模型以及关系模型
- Django学习06---Model模型(数据库)
- Django之model学习笔记
- 让django模型中的字段和model名显示为中文
- PythonWeb开发Django框架学习(八)Model与数据库初步
- Python django学习之:model (与数据库操作)
- Django model 常用方法记录
- Django学习-生成数据库model使用【Django开发08】
- Django学习之模型的操作详解
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- django学习——通过get_FOO_display 查找模型中的choice值
- django学习记录(二)