使用Django Postgres模型注释所有数组字段中字段值的出现

时间:2018-07-24 17:33:05

标签: django postgresql django-models

我有一个复杂的Django模型,可以用以下模型以非常简单的形式表示这个问题。

class Person(models.Model):
    name = models.CharField(max_length=20)
    friends = ArrayField(models.CharField(max_length=20))

它有一个名字和一个人认为自己是朋友的人的清单。这种关系可能不会双向发展。

动态填充收集此模型的数据,并且有人可能会说他们有一个尚未输入模型的朋友。这意味着不能使用多对多关系。

我想使用Django ORM找到一个纯数据库查询,该数据库可以用一个人在另一个人的朋友列表中输入的次数来注释查询集。

我可以使用以下代码在内存中完成此操作;

>>> people = Person.objects.all()
>>> friended_count = []
>>> for person in people:
>>>     friends = people.filter(friends__contains=[person.name])
>>>     friended_count.append({'name': person.name, 
>>>                            'friend_count': friends.count()})

我可以通过对查询集进行分页来提高内存使用效率,但是我觉得必须有一种方法可以通过批注查询来做到这一点,该批注查询对大数据集更有效。

有什么想法吗?

0 个答案:

没有答案