0

我在 Django 中有以下(简化的)模型,它与 Pinterest 数据模型非常相似:

class UserProfile(models.Model):
    user = models.OneToOneField(User)

class Collection(models.Model):
    owner = models.ForeignKey(User,related_name='collection_owner')
    followers = models.ManyToManyField(User, related_name='collection_followers', null=True, blank=True, default = None)

class Item(models.Model):
    collections = models.ManyToManyField(Collection,blank=True,null=True)

我有一个 User 模型,一个与用户进行 1-1 映射的 UserProfile 模型,一个 Collection 模型,它有一个所有者和关注者,以及可以是多个集合的一部分的项目。我正在努力确定如何在 Django 中执行以下查询:

获取给定用户的所有关注者。追随者的定义是追随该特定用户拥有的至少一个集合的定义。

获取用户关注的集合的所有不同项目。

我不确定是否可以在单个查询中执行这些操作,还是必须将其分解为多个查询?什么是最好的方法,是否有任何权衡?

谢谢你的帮助。

4

1 回答 1

0

我认为第一个是这样的:

User.objects.filter(collection_owner__owner='the user')

后者应该是这样的:

Item.objects.filter(collections__followers='the user').distinct()

但是,您应该知道,这些类型的查询不能扩展到大量数据。这样做需要相当多的黑客攻击......

于 2013-10-02T14:37:02.433 回答