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

Basics

First, install the package with pip

pip install django-generic-follow

Then add generic_follow to your INSTALLED_APPS

INSTALLED_APPS = (
    ...,
    'generic_follow',
)

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)

Usage

Follow/Unfollow

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

user.unfollow(band)

Checking if a user currently follows a model instance involves calling user.is_following

user.is_following(band)
# true/false

Retrieval Methods

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

band.get_follower_set()

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.

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

Signals

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)

Contributions

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.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

django_generic_follow-0.5.2-py2-none-any.whl (10.2 kB view details)

Uploaded Python 2

File details

Details for the file django_generic_follow-0.5.2-py2-none-any.whl.

File metadata

File hashes

Hashes for django_generic_follow-0.5.2-py2-none-any.whl
Algorithm Hash digest
SHA256 5b206ea34a7987ab0baf68eccf845dbd41e68bb5f4b0804ec3ba1c9224b52f7e
MD5 c47445918747f8d385b88604bbfd4f39
BLAKE2b-256 ffe749a0fbe753ebe2d238a501935630af7b2bc2a6a3098a821be6e6a16e04a2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page