faker 生成模拟数据

Django中使用faker 构建测试数据库

Django 的 Model:

from django.db import models

# Create your models here.

__allModel__ = [
        'Tag',
        'Category',
        'Post',
        ]

#Post vs Tag: mtm
#Post vs Category: mto

class Tag(models.Model):
    name = models.CharField(max_length = 50)

    def __str__(self):
        return self.name

class Category(models.Model):
    name = models.CharField(max_length = 50)

    def __str__(self):
        return self.name

class Post(models.Model):

    class Meta:
        ordering = ['-pub_date']




    title = models.CharField(max_length = 100) # 博客标题
    body  = models.TextField()
    pub_date = models.DateTimeField()
    mod_date = models.DateTimeField()
    number_of_comments = models.IntegerField()
    rating = models.IntegerField()

    tags = models.ManyToManyField(Tag)
    category= models.ForeignKey(Category,on_delete=models.CASCADE)

    def __str__(self):
        return self.title
View Code

Faker 脚本:

import os 
import django
import sys 

back = os.path.dirname
BASE_DIR = back(back(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

os.environ.setdefault('DJANGO_SETTINGS_MODULE','mysite01.settings')
django.setup()

if __name__ == '__main__':
    from blogs import models as blogs_models
    from django.utils import timezone
    import faker
    from datetime import timedelta





    if 0 == 0: # faker 构造数据
        fake_en = faker.Faker() # english 
        #fake_cn = faker.Faker('zh_CN') # 中文
        for _ in range(100): # 随机生成100 篇 Post 
            title = fake_en.sentence().rstrip('.')
            body = '
'.join(fake_en.paragraphs(20))

            pub_date = fake_en.date_time_between(
                    start_date = '-1y',
                    end_date = 'now',
                    tzinfo = timezone.get_current_timezone(),
                    )

            number_of_comments = fake_en.random_int()
            rating = fake_en.random_int() # 0 - 9999 的随机数

            tags = blogs_models.Tag.objects.order_by('?')
            tag1 = tags.first()
            tag2 = tags.last() 

            category = blogs_models.Category.objects.order_by('?').first()

            blog = blogs_models.Post.objects.create(
                    title = title,
                    body = body,
                    pub_date = pub_date,
                    mod_date = pub_date,
                    number_of_comments = number_of_comments,
                    rating = rating,
                    category = category,
                    )
            blog.tags.set([tag1,tag2])
Django 外Python脚本

       

这样更方便测试,也更好的验证一些知识点,

参考:

https://www.cnblogs.com/blueteer/p/10277725.html

原文地址:https://www.cnblogs.com/zach0812/p/13793016.html