web-dev-qa-db-ja.com

ポピュレートDjangoデータベース

私は、住所、電話番号、名前などのユーザー情報を保存するDjangoアプリケーションを開発しています。

私はPHPの Faker ライブラリとLaravelに含まれているシーダーを使用しました。データベースに偽のデータを入力することができましたが、現在はDjangoを使用しています。

ユーザーテーブルに約200のエントリを入力したいと思います。ただし、エントリをランダムな文字列にしたくありません。 Laravelで取得できるような偽のデータにしたいです。やり方がわかりません。

偽のデータを永続化するには何をする必要がありますか?

これは、エンドユーザーにいくつかのエントリを含むアプリケーションを表示して、統計などを確認できるようにするためのものです。データはデータベースにとどまる必要があります。単体テストを使用してみましたが、単体テストの終了後にデータベースが削除されます。

ありがとう!

15
user3186459

それをうまく行うには、 Factory BoyFakerカスタム管理コマンド の組み合わせが必要です。

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人の偽のユーザーを取得する1つの方法は、シェルにジャンプして_python manage.py Shell_し、次のことを行うことです。

_ >>> # import UserFactory here
 >>> for _ in range(200):
 ...     UserFactory.create()
_

柔軟性を大幅に高めるもう1つの方法は、カスタム管理コマンドを作成することです。

たとえば、ディレクトリ_seed.py_(Djangoによって検出されるようにするため)に次のように_<yourapp>/management/commands_(これは管理コマンド名になります)を作成します。

_# <yourapp>/management/commands/seed.py
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_などを使用して実行します。

22
Dwayne Crooks

Django-autofixtureアプリをお試しください:
https://github.com/gregmuellegger/Django-autofixture

このアプリは、ランダムに生成された大量のテストデータを開発データベースにロードする簡単な方法を提供することを目的としています。管理コマンドを使用して、コマンドラインからテストデータをロードできます。

Djangoのフィクスチャに基づいているため、autofixtureという名前が付けられています。自動フィクスチャを使用しない場合は、管理者を通じてテストデータを追加して、サイトの非静的ページがどのように表示されるかを確認します。 dumpdataを使用してデータをエクスポートし、同僚に送信したり、manage.pyリセットアプリを作成する前に保存したりします。サイトが複雑になるにつれて、データを追加および再追加するプロセスはますます煩わしくなります。

これを参照してくださいDjangoパッケージも、偽のテストやその他の問題に役立つ可能性があります。 https://www.djangopackages.com/grids/g/fixtures/

2
Paulo Pessoa