我正在开发一个Django应用程序,用于存储用户信息,如地址,电话号码,姓名等。
我使用过PHP的Faker库以及Laravel附带的播种机。我已经能够用假数据填充数据库,但现在我正在使用Django。
我想用大约200个条目填充我的用户表。但是,我不希望条目是随机字符串。我希望它是像Laravel一样的假数据。我不知道怎么做。
如何保留虚假数据需要做什么?
这是为了向最终用户显示一些条目的应用程序,以便他可以查看统计信息和其他内容。数据将需要保留在数据库中。我尝试使用单元测试,但在单元测试结束后删除了数据库。
谢谢!
答案 0 :(得分:17)
@ user3186459这是一个很好的问题。
要以一种很好的方式完成它,您需要Factory Boy,Faker和custom management commands的组合。
Factory Boy允许您创建用于生成有效对象的模板,Faker生成虚假数据。
当您安装Factory Boy,pip install factory_boy
时,您也会获得Faker。
鉴于,
from django.db import models
class User(models.Model):
name = models.CharField(max_length=64)
address = models.CharField(max_length=128)
phone_number = models.CharField(max_length=32)
您可以按如下方式定义工厂:
import factory
import factory.django
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
name = factory.Faker('name')
address = factory.Faker('address')
phone_number = factory.Faker('phone_number')
然后,您可以通过调用UserFactory.create()
来创建虚假用户。
获得200名假用户的一种方法是跳转到shell python manage.py shell
,然后执行:
>>> # import UserFactory here
>>> for _ in range(200):
... UserFactory.create()
另一种可以提供更多灵活性的方法是创建自定义管理命令。
这是一个简单的例子:
from django.core.management.base import BaseCommand
# import UserFactory here
class Command(BaseCommand):
help = 'Seeds the database.'
def add_arguments(self, parser):
parser.add_argument('--users',
default=200,
type=int,
help='The number of fake users to create.')
def handle(self, *args, **options):
for _ in range(options['users']):
UserFactory.create()
并且,您可以通过命令行运行它,例如python manage.py seed
或python manage.py seed --users 50
。
答案 1 :(得分:2)
试用django-autofixture
应用:
https://github.com/gregmuellegger/django-autofixture
这个应用程序旨在提供一种随机加载大量的简单方法 将测试数据生成到开发数据库中。你可以使用 管理命令通过命令行加载测试数据。
它被命名为autofixture,因为它基于django的灯具。 如果没有自动混合,您可以通过管理员添加测试数据以查看 您网站上的非静态网页外观。您使用dumpdata导出数据 将它发送给你的同事或在你制作之前保存它 manage.py重置应用程序等。随着您的网站变得越来越复杂 添加和重新添加数据的过程变得越来越烦人。
看到这个django包,也许可以帮助假测试和其他问题。 https://www.djangopackages.com/grids/g/fixtures/