Django Academy · レッスン

Profiles用のOneToOneField

関連するレコードでモデルを拡張します

レッスン 3/413 ステップ

「Profiles用のOneToOneField」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。

お互いに1つだけ対応する関係

ある行が、両方向で必ず1つの別の行と対応する場合があります。これが一対一の関係で、データをきれいに分割するのに適しています。

プロフィールパターン

典型的な用途はユーザーのprofileです。各ユーザーに1つのプロフィールがあり、各プロフィールは1人のユーザーに属します。追加フィールドは別に管理できます。

OneToOneField の宣言

もう一方のモデルを指定したOneToOneFieldを追加します。組み込みの一意性保証がある ForeignKey のように動作します。

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

内部では一意に設定される

OneToOneField の実体は、uniqueが設定された ForeignKey です。この制約により、2つのプロフィールが同じユーザーを共有することはありません。

on_delete はここでも必要

他の関連と同じく、on_deleteが必要です。CASCADE を指定すると、ユーザーを削除したときにプロフィールも同時に削除されます。

user = models.OneToOneField(User, on_delete=models.CASCADE)

フィールドを追加するだけではだめですか?

元のモデルにフィールドを追加することもできますが、プロフィールを分けると構造が整理され、管理していないテーブルに手を加えずに済みます。

順方向からのアクセス

プロフィールから、フィールドを通して関連するユーザーを直接読み取れます。関連する1つのオブジェクトが返されます。

profile = Profile.objects.first()
print(profile.user.username)

逆方向からのアクセス

逆方向のアクセスは特別です。ユーザーからプロフィールにアクセスするには小文字のモデル名を使い、_set 接尾辞は必要ありません。

user = User.objects.first()
print(user.profile.bio)

プロフィールを作成する

関連付けるユーザーを渡してプロフィールを作成します。一意性制約により、同じユーザーに2つ目のプロフィールを作成することはできません。

Profile.objects.create(user=user, bio="Hello!")

シグナルで自動作成する

よく使われる方法は、ユーザーが作成された瞬間にプロフィールを作成するpost_saveシグナルです。これにより、常にペアが存在するようにできます。

ペアをまたいだクエリ

double underscoreを使って関連をたどり、ユーザー側からプロフィールのフィールドをフィルタリングできます。逆方向も同様です。

User.objects.filter(profile__bio__icontains="django")

理解度チェック

各ユーザーには最大1つのプロフィールがあり、各プロフィールには1人のユーザーが必要です。この関係を表すフィールドはどれですか?

まとめ

よくできました!OneToOneFieldは2つの行を一意に対応付け、逆方向にはモデルの小文字の名前でアクセスします。👤

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「Profiles用のOneToOneField」レッスンは無料ですか?

はい。「Profiles用のOneToOneField」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。

「Profiles用のOneToOneField」で何を学びますか?

関連するレコードでモデルを拡張します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Django Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Profiles用のOneToOneField」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDjango Academyレッスンでコードを書いて実行できますか?

はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ForeignKeyとon_delete
  2. ManyToManyFieldとThrough Models
  3. Profiles用のOneToOneField
  4. related_nameと逆引き
← Django Academyに戻る