Python - 外部キーを持つモデルに Django で結合クエリを実装する方法

okwaves2024-01-24  5

皆さん。 「次のこと」を実装したいと考えています。ジャンゴのプロファイルモデルの関数。私には関係モデルがあり、両方のフィールドを結合して、クエリに一致するユーザーを選択できるようにしたいと考えています。

私はピーウィーを知っているので、次のようなことをします:

def following(self):
    return ( User.select().join(Relationship, 
            on=Relationship.to_user).where(Relationship.from_user == self))

しかし、django で結合クエリを作成する方法が見つかりませんでした。 これは、models.py にあるモデルです

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    joined_at = models.DateTimeField()

    class Meta:
        ordering = ['-joined_at']

    def __str__(self):
        return f'{self.user.username} profile' 

    def following(self):
        """ I want to implement the query here. """

class Relationship(models.Model):
    from_user = ForeignKey(User, related_name='relationships')
    to_user = ForeignKey(User, related_name='related_to')

次から何を返したいですか... 要求しているものの SQL バージョンを示してください。

– ビプロブ・ラミカーン

2020 年 9 月 3 日 3:55



------------------------

これを試してみることができます。

def following(self):
    """ return list objects of User followings """
    return Relationship.filter(from_user=self.user)\
                       .values_list('to_user', flat=True)

しかし、クエリセットとして返す必要があるのですが、どうすればよいでしょうか?

def following(self):
    """ this will return as `User` queryset """
    user_ids = Relationship.filter(from_user=self.user)\
                           .values_list('to_user_id', flat=True)
    return User.objects.filter(id__in=user_ids)

2

ご回答いただき、誠にありがとうございます。まるで魔法のようにうまくいきました。疑問に思っていたのですが、お時間があれば。何をしたのか、それがどのように機能するのかを説明するためです。または、ドキュメントのどこで詳細を確認できますか。でも、もう一度、ありがとう。

– レオ・フェルナンド

2020 年 9 月 3 日 16:03

@CésarGómez 詳細については、QuerySet API リファレンスを参照してください。

– ビンピー

2020 年 9 月 3 日 23:49

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。