最近开始看python,稍微看了点基础语法就开始看Django撸个简单的留言板。
跟着2.1中文文档来走,首先会在model这里比较花时间,因为跟php部分框架的model不太一样;
文档开始虽然没细讲,但还是会不自主去深入了解下模型关系等高级方法。

首先贴出几个在了解Django model时比较有用的文档页
model fields源码model fields使用

模型定义与表创建

表的话目前打算就创建两个 一个是users,另一个是comments
字段都是简单的用户信息和聊天信息
代码如下

dj-models.png
首先看users和comment类,一般的是先import下models
然后在类里定义字段,格式一般都是 xx = models.xxxField('comment' , **kw)
但也有是直接用自定义的类,原因是Django不像PHP框架过度倾向Mysql,
所以某些Mysql的字段的类型可能不支持,需要自己去实现,比如tinyint和unsigned

定义好后就执行两条命令 yourAppName对应你的app名,我的叫blog

python manage.py makemigrations yourAppName

#输出
Migrations for 'blog':
  blog\migrations\0001_initial.py
    - Create model comment
    - Create model users

python manage.py migrate yourAppName

#输出
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0001_initial... OK

检查下数据库表是否成功建立即可,表明前缀是app名_

表的字段更改

这个时候,我打算把 comment表名改成comments
首先把models.py的class comment改成class comments
然后重新执行下makemigrations 和 migrate

python manage.py makemigrations blog

#输出
Did you rename the blog.comment model to comments? [y/N] y
Migrations for 'blog':
  blog\migrations\0003_auto_20190423_1415.py
    - Rename model comment to comments


python manage.py migrate blog

#输出
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0003_auto_20190423_1415... OK

改字段名、数据类型也是一样

回滚

现在我又后悔了 想要把comments改回叫comment
不需要makemigrations 和 migrate这么麻烦
像PHP的Laravel框架迁移类一样,每次更改都会生成一个迁移文件记录每一步操作
在你app目录的migrations文件夹里,点进去就能看到具体进行了哪些操作
dj-migrate.png
假如0003_auto_20190423_1415.py是刚才从comment=>comments的迁移文件
那我们的是需要返回到0002的状态,使用以下指令

python manage.py migrate blog 0002

#输出
Operations to perform:
  Target specific migration: 0002_auto_20190423_1403, from blog
Running migrations:
  Rendering model states... DONE
  Unapplying blog.0003_auto_20190423_1415... OK

标签: none

添加新评论