2

我正在尝试使用我的 Django 项目的一些测试数据预填充数据库。有没有一些简单的方法可以使用 Django“外部”的脚本来做到这一点?

假设我想做这个非常简单的任务,使用以下代码创建 5 个测试用户,

N = 10
i = 0
while i < N:
    c = 'user' + str(i) + '@gmail.com'
    u = lancer.models.CustomUser.objects.create_user(email=c, password="12345")
    i = i + 1

问题是,

  1. 我把这个测试脚本文件放在哪里?
  2. 我需要在文件的开头放置什么 IMPORTS / COMMANDS 以便它可以访问所有 Django 环境和资源,就好像我在应用程序中编写它一样?

我认为您必须导入和设置设置文件,并导入应用程序的模型等......但我所有的尝试都以某种方式失败了,所以希望能得到一些帮助 =)

谢谢!

提供另一个答案

下面的回答是很好的答案。我摆弄了一下,找到了另一种方法。我在测试数据脚本的顶部添加了以下内容,

from django.core.management import setup_environ
from project_lancer import settings
setup_environ(settings)
import lancer.models

现在我上面的代码可以工作了。

4

2 回答 2

4

我建议您将固定装置用于这些目的:

https://docs.djangoproject.com/en/dev/howto/initial-data/

如果您仍想使用此初始代码,请阅读:

如果您使用,您可以创建迁移并将此代码放在那里:

python manage.py schemamigration --empty my_data_migration

class Migration(SchemaMigration):
    no_dry_run = False

    def forwards(self, orm):
        # more pythonic, you can also use bulk_insert here 
        for i in xrange(10):
            email = "user{}@gmail.com".format(i)
            u = orm.CustomUser.objects.create_user(email=email, password='12345)

你可以把它放到你的TestCase的setUp方法中:

class MyTestCase(TestCase):
    def setUp(self):
        # more pythonic, you can also use bulk_insert here 
        for i in xrange(10):
            email = "user{}@gmail.com".format(i)
            u = lancer.models.CustomUser.objects.create_user(email=email,
                                                             password='12345')
    def test_foo(self):
        pass

你也可以定义你的 BaseTestCase 你覆盖 setUp 方法然后你创建你的 TestCase 类继承 BaseTestCase:

class BaseTestCase(TestCase):
    def setUp(self):
        'your initial logic here'


class MyFirstTestCase(BaseTestCase):
    pase

class MySecondTestCase(BaseTestCase):
    pase

但我认为固定装置是最好的方法:

class BaseTestCase(TestCase):
    fixtures = ['users_for_test.json']

class MyFirstTestCase(BaseTestCase):
    pase

class MySecondTestCase(BaseTestCase):
    fixtures = ['special_users_for_only_this_test_case.json']

更新:

python manage.py shell
from django.contrib.auth.hashers import make_password
make_password('12312312')
'pbkdf2_sha256$10000$9KQ15rVsxZ0t$xMEKUicxtRjfxHobZ7I9Lh56B6Pkw7K8cO0ow2qCKdc='
于 2013-06-24T02:50:22.417 回答
3

您还可以使用类似东西 来自动填充模型以进行测试。

于 2013-06-24T04:34:50.067 回答