Я создаю фабрику для следующей модели Django:
class Book(models.Model):
tenant = models.ForeignKey('elearning.Tenant')
book_id = models.IntegerField()
ean = models.CharField(max_length=13, null=False)
title = models.CharField(verbose_name="titel", max_length=200)
author_name = models.CharField(max_length=200)
description = models.TextField()
price_id = models.IntegerField()
buy_option_text = models.CharField(max_length=50)
loan_days = models.IntegerField(null=True)
type = 'Yindoboek'
, которую я превратил в эту фабрику:
class BookFactory(factory.django.DjangoModelFactory):
class Meta:
model = Book
tenant = factory.SubFactory(TenantFactory)
book_id = factory.LazyFunction(lambda: random.randint(1, 1000))
ean = factory.LazyFunction(
lambda: ''.join(
random.choice(string.ascii_uppercase) for _ in range(6)
) + ''.join(random.choice(string.digits) for _ in range(6))
)
title = factory.Faker('company')
author_name = factory.Faker('name_male')
description = factory.Faker('text')
price_id = factory.LazyFunction(lambda: random.randint(1, 1000))
buy_option_text = factory.Faker('sentence')
loan_days = factory.LazyFunction(lambda: random.randint(1, 150))
type = 'Yindoboek'
Однако, когда я пытаюсь запустить следующий тест:
def test_factory_matches_model(self):
""" Verify that the factory generates a valid Book instance """
self.assertTrue(self.book)
self.assertTrue(self.book.tenant)
Вылетает со следующей ошибкой:
TypeError: 'type' is an invalid keyword argument for this function
Кажется, FactoryBoy отключает поле type
в модели Book
, который является не экземпляром поля Django, а константой.
Если я исключу это поле из фабрики, тест будет пройден - но я бы предпочел не удалять поля (все дело в том, чтобы проверить все поля / комбинации) - поэтому мне было интересно, был ли способ обойтиэта проблема, кто-нибудь знает решение?