Я использую Django 2.1.3 с Python 3.6.6.У меня есть две модели: пользовательская модель User и модель Connection для отслеживания отношений между пользователями, определенные следующим образом:
from django.db import models
from django.contrib.auth.models import
class User(AbstractUser):
# (additional fields)
connections_sent = models.ManyToManyField(
'self',
through='Connection',
# through_fields=('from_user', 'to_user'),
related_name='connections_received',
symmetrical=False,
)
def __str__(self):
return self.email
def add_connection(self, user):
connection, created = Connection.objects.get_or_create(
from_user=self,
to_user=user,
)
return connection
def remove_connection(self, user):
Connection.objects.filter(
from_user=self,
to_user=user,
).delete()
return
class Connection(models.Model):
from_user = models.ForeignKey(User, related_name='from_users', on_delete=models.CASCADE)
to_user = models.ForeignKey(User, related_name='to_users', on_delete=models.CASCADE)
class Meta:
unique_together = ('from_user', 'to_user')
def __str__(self):
return "Connection from {} to {}".format(self.from_user, self.to_user)
Идея состоит в том, что (подобно LinkedIn) пользователи могут отправлять запросы на подключение другим пользователям.(connections_sent), который пользователь-получатель должен подтвердить, прежде чем произойдет дальнейшее взаимодействие.
Я хотел бы определить функцию User.get_confirmed_connections(self)
, которая фильтрует connections_sent
так, чтобы возвращались только подтвержденные соединения.Т.е. он должен вернуть пересечение между connections_sent
и connections_received
.Можно ли это сделать с помощью фильтров?