Generic follow system for Django
django-generic-follow is a system to allow users to follow any model in a Django project.
Installation / Setup
First, install the package with pip
pip install django-generic-follow
Then add generic_follow to your INSTALLED_APPS
INSTALLED_APPS = ( ..., 'generic_follow', )
If you are using the auth.User user model, the user instance methods will be set up for you. If you are using a custom User model, you will need to apply the UserFollowMixin
from django.contrib.auth.models import AbstractUser from generic_follow.model_mixins import UserFollowMixin class MyCustomUser(UserFollowMixin, AbstractUser): ...
To add the convenience methods to models that will be followed apply the TargetFollowMixin
from django.db import models from generic_follow.model_mixins import TargetFollowMixin class Band(TargetFollowMixin, models.Model): name = models.CharField(max_length=255)
To make a user follow a model instance use the user.follow method
user = User.objects.first() band = Band.objects.get(name='Foals') user.follow(band)
To make a user unfollow a model instance simply call user.unfollow
Checking if a user currently follows a model instance involves calling user.is_following
user.is_following(band) # true/false
To see all model instances that a user is following call the user.get_follow_set method.
user.get_follow_set() # [<Band: foals>]
Optionally, the model kwarg can be provided to only return followed instances of that model type
user.get_follow_set(Photographer) # 
On the follow target, model.get_follower_set can be called to retrieve all followers
To make a list of users follow a given model instance call the create_batch manager method
user2 = ... Follow.objects.create_batch(users=[user, user2], target=band)
To perform the inverse, call the delete_batch manager method
Follow.objects.delete_batch(users=[user, user2], target=band)
To make some users follow a model instance, and others unfollow the same model instance in the same command, use update_batch. The users_follow kwarg accepts a 2-tuple of user instance, and a boolean indicating if this user should be following the instance.
Follow.objects.update_batch( target=band, users_follow=[(user, True), (user2, False)] ) # user will now be following foals, user2 will now not be following foals
Batch operations emit signals which can be used elsewhere in your project.
follow_bulk_create: Sent after Follow.objects.create_batch() completes
follow_bulk_delete: Sent after Follow.objects.delete_batch() completes
These signals send users and target as kwargs.
Connecting to these signals is the same as any other Django signal
def bulk_create_callback(sender, **kwargs): ... from generic_follow.signals import follow_bulk_create follow_bulk_create.connect(bulk_create_callback, sender=Follow)
Pull requests / issues welcome!
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size django_generic_follow-0.5.2-py2-none-any.whl (10.2 kB)||File type Wheel||Python version py2||Upload date||Hashes View|
Hashes for django_generic_follow-0.5.2-py2-none-any.whl