2
我已经搜索周围,但还没有找到像我这样的情况。假设使用Django的User Profile方法来扩展默认用户功能,多对象查询集将如何映射到相关对象的查询集。Django QuerySet选择相关对象
例如(在模型中):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField("self", symmetrical=True, blank=True)
和视图里面:
class Friends(generics.ListAPIView):
queryset=User.objects.all()
serializer_class = UserSerializer
def get_queryset(self):
user = self.request.user
profile = user.userprofile
profiles = profile.friends.all()
return profiles #We want this to be a queryset of users
我曾尝试以下,但这只适用于如果profiles
的大小为1。
return User.objects.filter(userprofile=profiles)
只是好奇,如果我们有ñ的UserProfiles和M个用户这会是一个O(M * N)操作或不Django的不知何故知道它优化到O(N)操作? – meritus
这条语句将被翻译成一个单一的sql语句,看起来像这样 'select * from users where id in(select user_id from profiles where .....)' 所以复杂度不会增加并且接近O(N)还是O(N * 2)?我不是专家,但肯定不是O(M * N) – Ramast
第二个想法是,复杂性可能会更高(在数据库层面)。要知道确切的复杂性,您需要了解db引擎如何执行子查询以及如何利用列索引。所有这些都不在我所知道的范围内 – Ramast