我在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中执行以下查询:
获取给定用户的所有关注者。跟随者的定义遵循至少一个由该特定用户拥有的集合。
获取用户关注的集合的所有不同项目。
我不确定我是否可以在单个查询中执行这些操作,还是必须在多个查询中将其分解?什么是最好的方法,是否有任何权衡?
感谢您的帮助。
答案 0 :(得分:0)
我认为第一个是这样的:
User.objects.filter(collection_owner__owner='the user')
后者应该是这样的:
Item.objects.filter(collections__followers='the user').distinct()
但是,您应该知道,这些类型的查询不可扩展到大量数据。这样做需要相当多的黑客攻击......