Generating Actions
===================
Generating actions can be done using `Django signals `__.
A special ``action`` signal is provided for creating the actions.
.. code-block:: python
from django.db.models.signals import post_save
from actstream import action
from myapp.models import MyModel
# MyModel has been registered with actstream.registry.register
def my_handler(sender, instance, created, **kwargs):
action.send(instance, verb='was saved')
post_save.connect(my_handler, sender=MyModel)
To generate an action anywhere in your code, simply import the action signal and send it with your actor, verb, target, and any other important arguments.
.. code-block:: python
from actstream import action
from myapp.models import Group, Comment
# User, Group & Comment have been registered with
# actstream.registry.register
action.send(request.user, verb='reached level 10')
...
group = Group.objects.get(name='MyGroup')
action.send(request.user, verb='joined', target=group)
...
comment = Comment.create(text=comment_text)
action.send(request.user, verb='created comment', action_object=comment, target=group)
Actions are stored in a single table in the database using `Django's ContentType framework `_
and `GenericForeignKeys `_ to create associations with different models in your project.
Actions are generated in a manner independent of how you wish to query them so they can be queried later to generate different streams based on all possible associations.