Получение всех объектов с одинаковыми полями M2M

Я ищу способ фильтрации всех объектов одного типа, которые имеют одинаковые наборы запросов для поля M2M.

class Comment(models.Model):
    user = models.ForeignKey(User, related_name='comment_user')    
    content = models.CharField(max_length=5000, null=True)

    private_to = models.ManyToManyField(User, null=True, related_name='private_to')

Учитывая объект комментария, я хочу получить все другие комментарии, которые имеют одинаковое поле M2M (т. е. если поле private_to возвращает пользователя 1 и пользователя 2 для комментария, оно найдет все другие комментарии, которые содержат точно обоих этих пользователей в поле private_to.)

Есть ли краткий встроенный способ сделать это?


person JayBee    schedule 09.02.2018    source источник


Ответы (1)


Попробуйте что-нибудь из это сообщение:

comment = Comment.objects.all()[0] # Or the comment you want to filter by.

private_to_ids = list(comment.private_to.all().values_list('id', flat=True))
comments = Comment.objects.filter(private_to__exact=private_to_ids)
person Rafael Moreno    schedule 09.02.2018
comment
Есть ли способ дополнительно получить все уникальные комбинации private_to? - person JayBee; 10.02.2018
comment
Вы имеете в виду все существующие (назначенные на данный момент) комбинации private_to m2m? Вы можете получить все комментарии и для каждого добавить comment.private_to.all().values_list('id', flat=True) к массиву, если набор еще не включен в него - person Rafael Moreno; 10.02.2018