Как узнать подписан ли пользователь на другого?

В Django, для определения того, подписан ли один пользователь на другого, можно использовать модель подписки и связанные с ней методы.

Прежде всего, необходимо определить модель для представления подписки. Модель может выглядеть примерно так:

from django.db import models
from django.contrib.auth.models import User

class Subscription(models.Model):
    subscriber = models.ForeignKey(User, related_name='subscriptions', on_delete=models.CASCADE)
    target_user = models.ForeignKey(User, related_name='subscribers', on_delete=models.CASCADE)

    class Meta:
        unique_together = ('subscriber', 'target_user')

В этом примере модель Subscription имеет два внешних ключа на модель User. Первый внешний ключ subscriber представляет пользователя, который подписывается, а второй внешний ключ target_user представляет пользователя, на которого подписываются. Мета-класс unique_together гарантирует, что каждый пользователь может быть подписан только один раз на другого пользователя.

Теперь, чтобы определить, подписан ли один пользователь на другого, вы можете использовать следующий код:

def is_subscribed(subscriber, target_user):
    return Subscription.objects.filter(subscriber=subscriber, target_user=target_user).exists()

Это функция is_subscribed, которая принимает двух пользователей в качестве параметров и возвращает True, если первый пользователь подписан на второго, и False в противном случае. Она использует метод filter для проверки наличия записи подписки с соответствующими значениями subscriber и target_user и метод exists для проверки, существует ли запись подписки.

Вы можете вызвать эту функцию следующим образом:

subscriber = User.objects.get(id=1)  # получение экземпляра пользователя, который подписывается
target_user = User.objects.get(id=2)  # получение экземпляра пользователя, на которого подписываются

if is_subscribed(subscriber, target_user):
    print('Пользователь подписан')
else:
    print('Пользователь не подписан')

Обратите внимание, что в приведенном выше примере используется идентификатор (id), чтобы получить экземпляры пользователей для проверки подписки. Вы можете использовать другой идентификатор, такой как имя пользователя, вместо этого.

Надеюсь, это поможет вам определить, подписан ли один пользователь на другого в Django. Если у вас есть дополнительные вопросы, не стесняйтесь задавать!