Django小练习(4)-数据库初始化数据

前面的文章中我们使用了两种方式给数据库表添加数据,一种是通过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即可成功在数据库中插入数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值