Generic follow system for Django
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_generic_follow-0.5.2-py2-none-any.whl
.
File metadata
- Download URL: django_generic_follow-0.5.2-py2-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b206ea34a7987ab0baf68eccf845dbd41e68bb5f4b0804ec3ba1c9224b52f7e |
|
MD5 | c47445918747f8d385b88604bbfd4f39 |
|
BLAKE2b-256 | ffe749a0fbe753ebe2d238a501935630af7b2bc2a6a3098a821be6e6a16e04a2 |