Ошибка целостности Django: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется с помощью factory_boy в модульном тесте Django
Я начал писать модульные тесты для своего приложения django и использовал Factory Boy для создания объектов с данными. но у меня эта ошибка
IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails
Это мой код:
models.py
class Group(models.Model):
created_by = models.ForeignKey(User)
name = models.CharField(_('Name'), max_length=100)
description = models.TextField(_('Description'), max_length=1000)
members = models.ManyToManyField(User, verbose_name='Members',
related_name='member', blank=True)
class User(models.Model):
username = models.CharField(_('username'),max_length=30,unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), blank=True)
password = models.CharField(_('password'), max_length=128)
factories.py
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.User
# to have unique user names
username = factory.Sequence(lambda n: 'name%d' % n)
first_name = factory.Faker('first_name')
last_name = factory.Faker('last_name')
# email based on the username
email = factory.LazyAttribute(lambda obj: '%s@example.com' % obj.username)
password = 'admin'
class GroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.Group
created_by = factory.SubFactory(UserFactory)
@factory.post_generation
def members(self, create, extracted, **kwargs):
if not create:
# GroupFactory.build()
return
if extracted:
# A list of users were passed in, use them
for member in extracted:
self.members.add(member)
и в tests.py я хотел протестировать модель группы, вот как я создаю экземпляр группы:
class GroupTest(BaseModelTest):
model = Group
group = GroupFactory.build()
BaseModelTest
содержит некоторые абстрактные методы для тестирования edit
, add
модели.. и т. д..
Я думаю с factory boy
при объявлении пользователя в качестве вспомогательной фабрики он должен быть создан до создания экземпляра группы.. почему у меня есть эта ошибка:IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (``test_db_``.``members_group``, CONSTRAINT ``members_group_created_by_id_2f561a30_fk_members_user_id`` FOREIGN K
EY (``created_by_id``) REFERENCES ``members_user`` (``id``))')
?