私はこのようなモデルを持っているとしましょう。
class Job(models.Model):
client = models.ForeignKey(Contacts, null=True)
そして、私には仕事jがあるとしましょう。私はこのようにjに属するクライアントにアクセスできることを知っています
j.client
しかし、
j.client_id
だから私の質問は、j.clientへのアクセスはどのように機能するのですか?
djangoはclient__idを保存しますか?j.clientが呼び出されると、正しいオブジェクトを見つけるためにクエリを実行しますか?
または、オブジェクト参照がjに保存され、client__idにアクセスすると、ContactオブジェクトからIDが取得されますか?
ソースコードを少し調べましたが、質問に対する答えが見つかりませんでした
これはドキュメントで説明されています:https:
//docs.djangoproject.com/en/dev/ref/models/fields/#database-representation
データベースにはclient_id
フィールドのみがあります(単一のアンダースコア)
モデルインスタンスにはclient
属性があります。これにアクセスすると、Djangoは関連するオブジェクトをデータベースからロードし、別のモデルインスタンスとしてインスタンス化します。
またclient_id
、dbフィールドに格納されている、関連オブジェクトの主キー値を持つ属性(1つのアンダースコア)もあります。
ORMクエリを実行する場合、client__id
(二重アンダースコア)構文を使用して、関連するモデルのフィールドを検索できます。たとえばclient__name
、Client
モデルにname
フィールドがある場合にも実行できます。これは、両方のモデルでSQLJOINクエリになります。
例えば
Job.objects.get(client__id=1)
Job.objects.filter(client__name='John')
client = Client.objects.get(pk=1)
Job.objects.get(client=client)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加