通过两个ManyToMany-relations的计数过滤数据的方法是什么?
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次...没有预期的结果! 但是,如果将第一个数字乘以第二个数字,则结果永远不会高于范围的最大值! ...真的很神秘(:-)