This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:
AUTH_USER_MODEL
.Django 4.2, 5.1, and 5.2 + Python 3.9, 3.10, 3.11, 3.12, and 3.13 support added >v1.9.6
Previously:
pip install django-friendship
"friendship"
to INSTALLED_APPS
and run python manage.py migrate
.urlpatterns = [ # other paths 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
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, BlockGetting Data about Friendships
Friend.objects.friends(request.user)
Friend.objects.unread_requests(user=request.user)
Friend.objects.unrejected_requests(user=request.user)
Friend.objects.unrejected_request_count(user=request.user)
Friend.objects.rejected_requests(user=request.user)
Friend.objects.rejected_request_count(user=request.user)
Friend.objects.sent_requests(user=request.user)
Friend.objects.are_friends(request.user, other_user) == True
Follow.objects.followers(request.user)
Follow.objects.following(request.user)
Block.objects.blocked(request.user)
Block.objects.blocking(request.user)
Block.objects.is_blocked(request.user, other_user) == True
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 optionalLet 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)
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 %}
django-friendship
emits the following signals:
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') )
Development takes place on GitHub. Bug reports, patches, and fixes are always welcome!
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:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4