Как создать экземпляр с Fk on User с factory boy? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь смоделировать объекты ресурса, которые имеют FK для модели User, но когда я создаю экземпляр класса o, появляется ошибка:

bf = BenefitFactory()

AttributeError: type object У 'UserFactory' нет атрибута '_meta'

Фабрики:

class UserFactory:
    class Meta:
        model = User

    first_name = factory.Faker('first_name')
    last_name = factory.Faker('last_name')
    username = factory.Faker('email')
    password = factory.LazyFunction(lambda: make_password('pi3.1415'))
    is_staff = False
    is_superuser = False


class BenefitFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Benefit

    user = factory.SubFactory(UserFactory)

Я также пытался использовать метод RelatedFactory, например:

class BenefitFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Benefit

    user = factory.RelatedFactory(UserFactory, 'user')

Но тогда я получил сообщение об ошибке:

django .db.utils.IntegrityError: нулевое значение в столбце "user_id" нарушает ненулевое ограничение

Как я могу создать Benefit объекты, связанные с пользователем?

1 Ответ

0 голосов
/ 19 марта 2020

Первая ошибка возникает из-за того, что UserFactory не наследуется от factory.django.DjangoModelFactory!

. Для второй RelatedFactory запускается после , сохраняя Benefit в базу данных; но поскольку ваша модель Benefit имеет значения от ForeignKey до User, вы ДОЛЖНЫ предоставить экземпляр User при создании Benefit - что делается с использованием SubFactory, как в Ваша первоначальная версия!

Итак, исправление просто:

class UserFactory(factory.django.DjangoModelFactory):
    ...


class BenefitFactory(factory.django.DjangoModelFactory):
    ...

    user = factory.SubFactory(UserFactory)
...