Answer the question
In order to leave comments, you need to log in
How to write an abstract?
There is a friend request model:
class AddRequest(models.Model):
sender = models.ForeignKey(Contact, on_delete=models.CASCADE, related_name = 'invited', null=True)
receiver = models.ForeignKey(Contact, on_delete=models.CASCADE, null=True, related_name='invites')
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.sender.user.username} -> {self.receiver.user.username}'
class Meta:
verbose_name = 'Запрос на добавление'
verbose_name_plural = 'Запросы на добавление'
class Contact(models.Model):
user = models.ForeignKey(User, related_name='friends', on_delete=models.CASCADE)
friends = models.ManyToManyField('self', blank=True)
image = models.ImageField('Изображение', upload_to = 'user_avatars/%Y/%m/%d', blank=True)
def __str__(self):
return self.user.username
class Meta:
verbose_name = 'Контакт'
verbose_name_plural = 'Контакты'
class ContactCustomViewSet(RetrieveUpdateDestroyPermissionViewset):
'''Обзор, обновление и удаление контакта'''
serializer_class = ContactDetailSerializer
permission_classes = [IsCurrentUser, ]
permission_classes_by_action = {
'retrieve': [permissions.IsAuthenticated, ]
}
def get_queryset(self):
queryset = Contact.objects.all().annotate(
is_friend=Count('friends', filter=Q(friends__user=self.request.user))
).annotate(
num_friends=Count('friends')
).annotate(
current_user=Count('user', filter=Q(user=self.request.user))
).annotate(
is_sent=Count('invited', filter=Q(invited__user=self.request.user))
)
return queryset
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question