使用 Factoryboy 模型中字段之间的依赖关系
Dependency between fields in model using Factoryboy
我有一个 Django 模型,我想使用 Factoryboy 对其进行测试。
这里的问题是字段相互依赖。
class SearchPreferences(models.Model):
min_age = models.PositiveSmallIntegerField(null=True)
max_age = models.PositiveSmallIntegerField(null=True)
在这种情况下,max_age
不能小于 min_age
。
class SearchPreferencesFactory(DjangoModelFactory):
min_age = FuzzyInteger(30, 90)
max_age = FuzzyInteger(SelfAttribute('min_age'), 100)
这是我尝试做的,它应该给我 min_age
和 100 之间的 max_age
值,但发生的是 TypeError:
TypeError: unsupported operand type(s) for +: 'SelfAttribute' and 'int'
这对我来说很有意义,但我真的不知道如何让它发挥作用?
谁能解释一下最好的方法是什么?
您可以在 max_age 上使用 LazyAttribute,即:
class SearchPreferencesFactory(DjangoModelFactory):
min_age = FuzzyInteger(30, 90)
max_age = LazyAttribute(lambda x: FuzzyInteger(x.min_age, 100).fuzz())
我有一个 Django 模型,我想使用 Factoryboy 对其进行测试。
这里的问题是字段相互依赖。
class SearchPreferences(models.Model):
min_age = models.PositiveSmallIntegerField(null=True)
max_age = models.PositiveSmallIntegerField(null=True)
在这种情况下,max_age
不能小于 min_age
。
class SearchPreferencesFactory(DjangoModelFactory):
min_age = FuzzyInteger(30, 90)
max_age = FuzzyInteger(SelfAttribute('min_age'), 100)
这是我尝试做的,它应该给我 min_age
和 100 之间的 max_age
值,但发生的是 TypeError:
TypeError: unsupported operand type(s) for +: 'SelfAttribute' and 'int'
这对我来说很有意义,但我真的不知道如何让它发挥作用?
谁能解释一下最好的方法是什么?
您可以在 max_age 上使用 LazyAttribute,即:
class SearchPreferencesFactory(DjangoModelFactory):
min_age = FuzzyInteger(30, 90)
max_age = LazyAttribute(lambda x: FuzzyInteger(x.min_age, 100).fuzz())