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)
興味があるだけ我々はN USERPROFILESとMのユーザーを持っていた場合、これはO(M * N)操作になりますか、Djangoは何らかの形でO(N)操作にそれを最適化するために、知っているのですか? – meritus
このステートメントは、次のような単一のSQL文に変換されます 'select * from users where(select user_id from profiles .....) ' 複雑さが増えず、 O(N)またはおそらくO(N * 2)?私は専門家ではありませんが、確かにO(M * N)ではありません – Ramast
2番目の考えでは、複雑さがより高くなる可能性があります(DBレベル)。 dbエンジンがサブクエリをどのように実行するのか、カラムインデックスをどのように利用するのかを理解するために必要な正確な複雑さを知る必要があります。すべて私の知識の範囲外です – Ramast