Home

Awesome

django-friendship

CI

This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:

Requirements

Django 5.0 and 5.1 + Python 3.11 and Python 3.12 support added >v1.9.6

Previously:

Installation

  1. pip install django-friendship
  2. add "friendship" to INSTALLED_APPS and run python manage.py migrate.
  3. Use the friendship manager in your own views, or wire up the URLconf to include the builtin views:
urlpatterns = [
    ...
    path('friendship/', include('friendship.urls'))
    ...
]

Note: If you are migrating from django-friendship v1.6.x, you'll need to rollback your migrations and fake migration 0002

$ ./manage.py migrate friendship 0001
$ ./manage.py migrate friendship 0002 --fake

If you're migrating from v1.7.x, you'll likely have to fake 0003 as well:

$ ./manage.py migrate friendship 0003 --fake

Usage

django-friendship provides a free API that gives you several ways to create and manage friendship requests or follows in your views. Add the following at the top of your views.py:

from django.contrib.auth.models import User
from friendship.models import Friend, Follow, Block

Getting Data about Friendships

Getting Data about Follows

Getting Data about Blocks

Managing Friendships and Follows

Create a friendship request:

other_user = User.objects.get(pk=1)
Friend.objects.add_friend(
    request.user,                               # The sender
    other_user,                                 # The recipient
    message='Hi! I would like to add you')      # This message is optional

Let the user who received the request respond:

from friendship.models import FriendshipRequest

friend_request = FriendshipRequest.objects.get(from_user=request.user, to_user=other_user)
friend_request.accept()
# or friend_request.reject()

To remove the friendship relationship between request.user and other_user, do the following:

Friend.objects.remove_friend(request.user, other_user)

Make request.user a follower of other_user:

Follow.objects.add_follower(request.user, other_user)

Make request.user block other_user:

Block.objects.add_block(request.user, other_user)

Make request.user unblock other_user:

Block.objects.remove_block(request.user, other_user)

Templates

You can use django-friendship tags in your templates. First enter:

{% load friendshiptags %}

Then use any of the following:

{% friends request.user %}
{% followers request.user %}
{% following request.user %}
{% friend_requests request.user %}
{% blockers request.user %}
{% blocking request.user %}

Signals

django-friendship emits the following signals:

Settings

django-friendship supports the following settings:

FRIENDSHIP_CONTEXT_OBJECT_NAME = 'user'
FRIENDSHIP_CONTEXT_OBJECT_LIST_NAME = 'users'
FRIENDSHIP_MANAGER_FRIENDSHIP_REQUEST_SELECT_RELATED_STRATEGY = 'select_related'  # ('select_related', 'prefetch_related', 'none')

Contributing

Development takes place on GitHub. Bug reports, patches, and fixes are always welcome!

Need help?

REVSYS can help with your Python, Django, and infrastructure projects. If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:

<a href="https://revsys.com?utm_medium=github&utm_source=django-friendship"><img src="https://pbs.twimg.com/profile_images/915928618840285185/sUdRGIn1_400x400.jpg" height="50" /></a> <a href="https://twitter.com/revsys"><img src="https://cdn1.iconfinder.com/data/icons/new_twitter_icon/256/bird_twitter_new_simple.png" height="43" /></a> <a href="https://www.facebook.com/revsysllc/"><img src="https://cdn3.iconfinder.com/data/icons/picons-social/57/06-facebook-512.png" height="50" /></a>