質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

623閲覧

【django】modelsのリレーションシップについてと、そのベストプラクティスが知りたいです。

nre

総合スコア35

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2020/11/06 06:14

編集2020/11/06 08:11

【ご質問】

下記の画像の様な関係性の場合、
質問① 佐藤さんと「佐藤さんの詳細」の関係性は一対一の関係でしょうか?(OneToOne)

質問② 「鈴木さんの詳細」に対して複数のユーザーがいいねをする時の関係性は一対多の関係でしょうか?(ForeignKey)

質問③ メールアドレスを使用して会員登録させるため、カスタムユーザーモデルAbstractBaseUserを使用しているのですが、その際はカスタムユーザーモデル内にユーザーの特技などの詳細フィールドを組み込むのか、それともプロフィールモデルを別途作成してカスタムユーザーモデルに紐付けるのか。どちらがベストプラクティスでしょうか?
イメージ説明

一対一や多対一、多対多などのリレーションについて色々調べて見たのですが、私の中で引っかかるところがあってご教示して頂きたく存じます。
上手く伝えられないのですが、プロフィールは記事(ForeignKey)の様にも捉えられるんじゃないか?とも思うんです。
複数のユーザーがプロフィールというオブジェクトに情報を入力していき、そのプロフィールがユーザー分増える様な…普通に考えると上記の図の関係だと思うんですけど明確な答えが分かりませんでした。
記事に対するタグの関係性や、動物園に対する動物、クラブチームに対する選手とかは自分の中で落とし込めました。

【ユーザーとユーザプロフィールをあえて別々にしようと考えた理由】

理由はユーザー登録情報に必要なフィールド以外は別にした方がいいという記事や、実際に別にしてモデルを設計している記事を見かけたり、実際に行ってみて、上手くビューを動かせないなどの理由から、これらは別にした方がいいのかな?と思ったからです。

ただ、現在はカスタムユーザーモデル内に「ユーザーのプロフィール」となる自己紹介やニックネールなどのフィールドを設けております。
標準のユーザーモデルより自由にカスタマイズ出来るカスタムユーザーモデルを推奨している事はドキュメントを読んで理解しております。
ただ、ビューを設計している時に思った様に動かない事が多いので、記事モデルの様にユーザーと紐付けした方(情報がたくさん出てくるため)がベストプラティクスなのかなと思ってどちらがいいのかご教示して頂きたいです。

【環境】
django2.1 or django3.1
python3.7

cuz👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/11/06 06:47 編集

「ユーザ」と「ユーザのプロフィール」をあえて別にしている理由を書かないと、答えようがないように思いました。 あと表題と質問中にでてくる"リレーション"は"リレーションシップ"の間違いでしょう。調べた時にどのぐらい影響があったか分かりませんが、一応。 (RDBにおける"リレーション"は、日常的には"テーブル"とか"レコード"とか呼んでいる概念のこと)
nre

2020/11/06 07:57

大変お忙しい中、 ご教示して頂き誠にありがとうございました。 「ユーザー」と「ユーザーのプロフィール」を別にしている理由を記載させていただきます。 また、リレーションシップに関しては認識違いと勉強不足が原因でしたので、リレーションシップに修正させていただきます。 ご助言して頂き誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問