Django 博客 - 2 创建数据库模型

创建模型

观察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相关的管理界面,然后就可以对自定义的模型增删改查了。

本文相关源码

猜你喜欢

转载自blog.csdn.net/abc_1234d/article/details/78296152