【发布时间】:2018-08-27 15:35:12
【问题描述】:
我有这样的食谱:
import factory
from models import Foobar
class MenuItemFactory(factory.Factory):
class Meta:
model = MenuItem
name = 'Default Foobar'
url = factory.LazyAttribute(lambda o: '/%s' % o.name)
我想添加动态属性,例如slug,但我想在单独的方法中进行。我想要这个,因为在 lambda 单行代码中编写任何更复杂的逻辑都会非常丑陋。
想到一个想法,使用property 方法,就像他们在 Django 模型中所做的那样。例如:
class MenuItemFactory(factory.Factory):
...
@property
def url(self):
return '/%s' % self.name
有没有类似的方法可以完成我想做的事情?
编辑
我最后想要完成的是这样的:
menu_item = MenuItemFactory(name='foobar')
menu_item.name = 'foobar'
menu_item.url = '/foobar'
其中slug 充当动态属性。换句话说,我正在寻找一个合适的地方来存储我的动态属性逻辑。
【问题讨论】:
-
你想在创建类时给 LazyAttribute 一个函数吗?还是在创建类后即时设置属性?
-
@bboumend 我想动态设置一个属性
标签: python django testing pytest factory-boy