前面的文章中我们使用了两种方式给数据库表添加数据,一种是通过python3 manage.py shell调出shell命令行来创建数据,一种是用前端通过post方式提交数据入库。
这里讲下第三种方式,通过执行python脚本来添加数据。
模型代码如下:models.py
#-*-coding:utf-8-*-
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=50)
qq = models.CharField(max_length=10)
addr = models.TextField()
email = models.EmailField()
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=50)
author = models.ForeignKey(Author,on_delete=models.CASCADE)
content = models.TextField()
score = models.IntegerField() # 文章的打分
tags = models.ManyToManyField('Tag')
def __str__(self):
return self.title
class Tag(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
初始化数据:initdb.py
# -*- coding: utf-8 -*-
import random
from zqxt.wsgi import *
from blog.models import Author, Article, Tag
author_name_list = ['zhangsan', 'lisi', 'wanger', 'xiaola', 'xiaowanzi']
article_title_list = ['Django 教程', 'Python 教程', 'HTML 教程']
def create_authors():
for author_name in author_name_list:
author, created = Author.objects.get_or_create(name=author_name)
# 随机生成9位数的QQ
author.qq = ''.join(
str(random.choice(range(10))) for i in range(9)
)
author.addr = 'addr_%s' % (random.randrange(1, 6))
author.email = '%s@test.com' % (author.addr)
author.save()
def create_articles_and_tags():
# 随机生成文章
for article_title in article_title_list:
# 从文章标题中得到 tag
tag_name = article_title.split(' ', 1)[0]
tag, created = Tag.objects.get_or_create(name=tag_name)
random_author = random.choice(Author.objects.all())
for i in range(1, 5):
title = '%s_%s' % (article_title, i)
article, created = Article.objects.get_or_create(
title=title, defaults={
'author': random_author, # 随机分配作者
'content': '%s 正文' % title,
'score': random.randrange(70, 101), # 随机给文章一个打分
}
)
article.tags.add(tag)
def main():
create_authors()
create_articles_and_tags()
if __name__ == '__main__':
main()
print("Done!")
运行python3 initdb.py即可成功在数据库中插入数据。