Как фильтровать данные по количеству двух отношений ManyToMany?
class Pic(models.Model):
size_kb = models.IntegerField(default=0,blank=True)
md5 = models.CharField(max_length=128,blank=True)
class Film(models.Model):
content = models.CharField(max_length=4096, null=True, blank=True)
duration = models.SmallIntegerField(null=True, blank=True)
class Video(models.Model):
md5 = models.CharField(max_length=32,blank=True)
rating = models.FloatField(null=True,blank=True)
year = models.SmallIntegerField(null=True,blank=True)
class Person(models.Model):
pics = models.ManyToManyField(Pic,related_name='persons')
videos = models.ManyToManyField(Video,related_name='persons')
films = models.ManyToManyField(Film, related_name='persons')
Поиск лиц с 10 - 20 фото:
Person.objects.all().annotate(seek_col=Count('Pic')).filter(seek_col__range=(10,20))
Результат в порядке ...
Поиск лиц с 10 - 20 фильмами:
Person.objects.all().annotate(seek_col=Count('Film')).filter(seek_col__range=(10,20))
Результат в порядке ...
Поиск лиц с 10 - 20 фильмами и 10 - 20 фото:
Я пробую следующие утверждения:
Person.objects.all().annotate(fcol=Count('films')).filter(fcol__range=(10,20)).annotate(pcol=Count('pics').filter(pcol__range=(10,20))
Person.objects.all().annotate(fcol=Count('films')).filter( pcol=Count('pics')).filter(fcol__range=(10,20), pcol__range=(10,20))
Результат бессмысленен ... не совсем бессмысленен:
Я ожидаю следующих результатов (только столбцы с фотографиями и фильмами):
| фото | фильмы |
| 20 | 20 |
| 10 | 20 |
| 14 | 15 |
| 10 | 12 |
| 16 | 13 |
| 12 | 17 |
но я получаю эти результаты (зависит от диапазона):
| фото | фильмы |
| 20 | 1 |
| 1 | 20 |
| 4 | 5 |
| 10 | 2 |
| 6 | 3 |
| 2 | 7 |
Я пробовал это 100 раз ... нет ожидаемого результата!
Но если вы умножаете первое на второе число, результат никогда не будет выше максимального значения диапазона !!
... действительно таинственный (: -)