Skip to main content

Generic follow system for Django

Project description

Build Status

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


User Model

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):

Target Models

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')


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

# true/false

Retrieval Methods

To see all model instances that a user is following call the user.get_follow_set method.

# [<Band: foals>]

Optionally, the model kwarg can be provided to only return followed instances of that model type

# []

On the follow target, model.get_follower_set can be called to retrieve all followers


Batch Operations

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.

    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!

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-generic-follow, version 0.5.2
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

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page