Заполните базу данных Django

Я разрабатываю приложение Django, которое хранит информацию о пользователях, такую ​​как их адрес, номер телефона, имя и т. Д.

Я работал с PHP-библиотекой Faker и сидером, включенным в Laravel. Мне удалось заполнить базу поддельными данными, но сейчас я работаю с Django.

Я хотел бы заполнить свою таблицу пользователей примерно 200 записями. Но я не хочу, чтобы записи были случайными строками. Я хочу, чтобы это были поддельные данные, которые я могу получить с помощью Laravel. Я не знаю, как это сделать.

Что мне нужно сделать, чтобы сохранить поддельные данные?

Это для того, чтобы показать конечному пользователю приложение с некоторыми записями, чтобы он мог видеть статистику и другие вещи. Данные должны будут остаться в базе данных. Я попытался использовать модульные тесты, но это удаляет базу данных после завершения модульного теста.

Спасибо!

3 ответа

@user3186459 Это отличный вопрос.

Чтобы сделать это хорошим способом, вам понадобится комбинация Factory Boy, Faker и пользовательских команд управления.

Factory Boy позволяет создавать шаблоны для создания допустимых объектов, а Faker генерирует поддельные данные.

Когда вы устанавливаете Factory Boy, pip install factory_boyВы также получаете Факер.

Дано,

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 поддельных пользователей - прыгнуть в оболочку, 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 например.

Попробуйте django-autofixture приложение:
https://github.com/gregmuellegger/django-autofixture

Это приложение призвано обеспечить простой способ загрузки массы случайно сгенерированных тестовых данных в вашу базу данных разработки. Вы можете использовать команду управления для загрузки тестовых данных через командную строку.

Он называется autofixture, потому что он основан на приспособлениях Django. Без автофиксации вы добавляете тестовые данные через администратора, чтобы увидеть, как выглядят нестатические страницы на вашем сайте. Вы экспортируете данные, используя dumpdata, чтобы отправить их своим коллегам или сохранить их, прежде чем создавать приложение сброса manage.py и так далее. По мере усложнения вашего сайта процесс добавления и повторного добавления данных становится все более раздражающим.

Посмотрите эти пакеты django тоже, возможно, они могут помочь с поддельными тестами и другими проблемами. https://www.djangopackages.com/grids/g/fixtures/

Для создания поддельных данных для djangoвы можете использоватьdjango-seed. Это простой процесс, поскольку

  • pip install django-seed(установить django-seed )

  • добавлять django_seedв ваших приложениях в settings.pyфайл.

            INSTALLED_APPS = (
        ...
        'django_seed',
    )
    
  • python manage.py seed <app-name>

например: для заполнения приложения API django python manage.py seed api --number=15

При необходимости вы также можете указать, какое значение должно иметь то или иное поле. Например, если вы хотите заполнить 15 MyModel, но вам нужно, чтобы my_field было одинаковым для всех них, вы можете сделать это следующим образом:

      python manage.py seed api --number=15 --seeder "MyModel.my_field" "1.1.1.1"
Другие вопросы по тегам