У меня есть такой рецепт:
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
, но я хочу сделать это отдельным методом. Я хочу этого, так как написание какой-либо более сложной логики в лямбда-однострочниках было бы, ну, некрасиво.
Одна мысль пришла на ум, используя метод property
, как они делают в моделях Django. Например:
class MenuItemFactory(factory.Factory):
...
@property
def url(self):
return '/%s' % self.name
Есть ли способ, похожий на этот, который достигнет того, что я пытаюсь сделать?
EDIT
Что я хочу достичь в итоге, так это:
menu_item = MenuItemFactory(name='foobar')
menu_item.name = 'foobar'
menu_item.url = '/foobar'
Где slug
действует как динамический атрибут. Другими словами, я ищу подходящее место для хранения моей логики динамических атрибутов .