创建模型
观察csdn的博客界面,一篇博客通常有标题,作者,内容,摘要,访问数,创建时间,修改时间,标签,类别等等。
其中一篇文章对应一个类别,一个作者,而对应多个标签。
创建相关模型。
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Tag(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
#default参数指定创建时的默认值,这里为timezone.now方法
#也可以指定auto_now_add=True,与default=timezone.now作用相似
#但是设置了auto_now_add后就不可编辑了,因此此处使用default参数
created_time = models.DateTimeField(default=timezone.now)
#修改时间,设置auto_now参数为True,代表每次修改都将时间设置为最新
modified_time = models.DateTimeField(auto_now=True)
excerpt = models.CharField(max_length=200, blank=True)
views = models.PositiveIntegerField(default=0)
#ForeignKey代表一对一关系
author = models.ForeignKey(User)
category = models.ForeignKey(Category)
#ManyToManyField代表一对多关系
tags = models.ManyToManyField(Tag, blank=True)
def __str__(self):
return self.title
class Meta:
#默认按创建时间降序,不带-号代表升序
ordering = ['-created_time']
生成迁移文件
创建了新的模型后,需要生成迁移文件,用于生成对应的数据库表。
执行python manage.py makemigrations
正常情况下控制台输出
Migrations for 'blog':
blog\migrations\0001_initial.py
- Create model Category
- Create model Post
- Create model Tag
- Add field tags to post
执行完命令后,生成了blog\migrations\0001_initial.py
,
如果使用了git等版本管理系统,需要把迁移文件也提交上去。
迁移数据
如上篇博客一样,执行python manage.py migrate
但是这里迁移的是自己创建的模型的表。
输出如下
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying blog.0001_initial... OK
迁移完成后,查看数据库db.sqlite3,会发现多了blog_post、blog_tag、blog_category 和blog_post_tags这几张表。默认的表明是<app名>_<模型名>
,如果自定义的话,只需要指定模型里Meta类的db_table字段。
管理迁移文件
执行python manage.py
,可以看到有好多命令,其中有些命令可以管理迁移文件。
python manage.py showmigrations
显示所有的迁移文件
python manage.py sqlmigrate
显示迁移文件所对应的sql语句
比如上面生成的blog\migrations\0001_initial.py
可以使用python manage.py sqlmigrate blog 0001
python manage.py squashmigrations
合并迁移文件,如果模型的改动太多,生成了多个迁移文件,可以使用的这个命令进行合并
创建模型实例
创建了模型之后,就可以手动在命令行里创建实例了。
推荐使用IPython命令行,安装方法pip3 intall ipython
执行python manage.py shell
导入要用的模型类。
from blog.models import Post, Tag, Category
from django.contrib.auth.models import User
就可以开始创建实例了。
tag = Tag.objects.create(name='tag1')
cat = Category.objects.create(name='cat1')
user = User.objects.first()
post = Post.objects.create(title="title",excerpt="summary",body="content",author=user,category=cat)
post.tags.add(tag)
具体怎么使用模型API请查阅官方文档,模型API使用教程
同时也可以在后台管理界面添加模型实例,只需要在web\blog\admin.py
里将模型就行注册。
from django.contrib import admin
from blog.models import Post, Category, Tag
admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)
重新启动服务器后,进入管理界面,就可以发现多出了blog相关的管理界面,然后就可以对自定义的模型增删改查了。