Profiles用のOneToOneField
関連するレコードでモデルを拡張します
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ForeignKeyとon_delete
- ManyToManyFieldとThrough Models
- Profiles用のOneToOneField
- related_nameと逆引き