0

さて、複雑なクエリがあります。3つのテーブルがあるとしましょう。

class Logs:
    user = ForeignKey(User)
    ...

class User:
    name = CharField()
    ...

class User_Info:
    user = ForeignKey(User)
    address = CharField()
    ...

私がやりたいのは、Userを介してテーブルLogsとUser_Infoを関連付けることです。基本的に、Logs、User、およびUser_Infoのアドレスのすべてのフィールドを含む新しいテーブルを取得するために、結合を実行します。select_relatedを知っています。ただし、ログとユーザーを組み合わせることができるだけです。

User_Infoを関与させるにはどうすればよいですか?データベース呼び出しを最小限に抑えたい。したがって、理想的な答えは1つのデータベースヒットです。

編集:私は以下の答えに感謝します。この問題の最終的な解決策を示したいと思います。

複雑なクエリがある場合は、objects.raw()を使用するだけです。それはあなたの問題のほとんどを解決します。

4

2 に答える 2

1

models.py

class User:
    name = CharField()

    def logs(self):
        return Logs.objects.filter(user=self)

    def info(self):
        return User_Info.objects.filter(user=self)

views.py

users = User.objects.filter()        

レンプレート

{% for user in users %}
    {{ name }}

    {% for log in user.logs %}
        //log fields
    {% endfor %}

    {% for info in user.info %}
        //info fields
    {% endfor %}
{% endfor %}
于 2013-03-26T02:58:01.307 に答える
0

まず第一に、データベース呼び出しの数は必ずしもコードの行数とは関係ありません-QuerysetAPIの多くのメソッドは怠惰です。

Userとの間には実際には1対1の関係があるようですUser_Info。この場合、のOneToOneField代わりにを使用できますForeignKeyUser次に、モデルから直接情報にアクセスできます。https://docs.djangoproject.com/en/dev/topics/db/examples/one_to_one/を参照して ください

于 2013-03-25T19:54:43.290 に答える