Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Preencha o banco de dados Django


Para fazer isso de uma maneira agradável, você precisará de uma combinação de Factory Boy , Faker e comandos de gerenciamento personalizados .

O Factory Boy permite que você crie modelos para produzir objetos válidos e o Faker gera dados falsos.

Ao instalar o Factory Boy, pip install factory_boy , você também recebe Faker.

Dado,
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)

Você pode definir uma Fábrica da seguinte forma:
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')

Então, você pode criar usuários falsos chamando UserFactory.create() .

Uma maneira de obter seus 200 usuários falsos seria pular para o shell, python manage.py shell , e fazer:
 >>> # import UserFactory here
 >>> for _ in range(200):
 ...     UserFactory.create()

Outra maneira, que pode oferecer muito mais flexibilidade, é criar um comando de gerenciamento personalizado.

Por exemplo, crie seed.py (este será o nome do comando de gerenciamento) no diretório <yourapp>/management/commands (para tê-lo descoberto pelo Django) com o seguinte:
# <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()

E você o executaria pela linha de comando com python manage.py seed ou python manage.py seed --users 50 por exemplo.