diff options
author | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2011-07-05 12:20:48 +0200 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2011-07-05 12:20:48 +0200 |
commit | c4e749bf464cfd9aced3adcf729052079bc25eaa (patch) | |
tree | ea985d970ea124bfdb698a84f93357a9553b5cb8 | |
parent | 674878a940d1048e56ade5df08876ba963faeeb8 (diff) | |
download | factory-boy-c4e749bf464cfd9aced3adcf729052079bc25eaa.tar factory-boy-c4e749bf464cfd9aced3adcf729052079bc25eaa.tar.gz |
Add some doc on subfactories.
Signed-off-by: Raphaël Barrois <raphael.barrois@polyconseil.fr>
-rw-r--r-- | README.rst | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -166,6 +166,14 @@ Sequences can be combined with lazy attributes:: UserFactory().email # => mark+0@example.com +If you wish to use a custom method to set the initial ID for a sequence, you can override the ``_setup_next_sequence`` class method:: + + class MyFactory(factory.Factory): + + @classmethod + def _setup_next_sequence(cls): + return cls.FACTORY_FOR.objects.values_list('id').order_by('-id')[0] + 1 + Customizing creation -------------------- @@ -183,3 +191,30 @@ Factory._prepare method:: if create: user.save() return user + +Subfactories +------------ + +If one of your factories has a field which is another factory, you can declare it as a ``SubFactory``. This allows to define attributes of that field when calling +the global factory, using a simple syntax : ``field__attr=42`` will set the attribute ``attr`` of the ``SubFactory`` defined in ``field`` to 42:: + + class InnerFactory(factory.Factory): + foo = 'foo' + bar = factory.LazyAttribute(lambda o: foo * 2) + + class ExternalFactory(factory.Factory): + inner = factory.SubFactory(InnerFactory, foo='bar') + + >>> e = ExternalFactory() + >>> e.foo + 'bar' + >>> e.bar + 'barbar' + + >>> e2 : ExternalFactory(inner__bar='baz') + >>> e2.foo + 'bar' + >>> e2.bar + 'baz' + + |