DjangoのadminサイトでFKの名前が<テーブル名> object ()となってしまう

こんにちは!Nineeenという学生開発チームの代表をしている古谷洸樹ふるやこうきです。
Nineteenでは飲食店で使えるシフト作成アプリを開発しています。

今日はDjangoでデータベースのモデルを作成した際にadminサイトのFKの部分が<テーブル名> object (1)となってしまったのでその解決方法について記事にしていこうと思います。

多分、なんのことを言っているのかわかりにくいと思うので実際の画面を見て頂きます。

Django admin

私たちはStoreテーブルとGroupテーブルを1対多の関係でつないでいます。なのでGroupテーブルにはStore FKを付けているのですが、いざデータを入れてもどのストアがStore FKでつながっているのかが分かりません。

さっそくDjangoの公式サイトで調べてみました。
この解決策はここにありました。

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
Wait a minute. <Question: Question object (1)> isn’t a helpful representation of this object. Let’s fix that by editing the Question model (in the polls/models.py file) and adding a __str__() method to both Question and Choice:

https://docs.djangoproject.com/ja/4.0/intro/tutorial02/

ここには<Question: Question object (1)>という表示では全く役に立たないのでQuestionモデルを編集し、__str__()メソッドをQuestionモデルとChoiceモデルに追加しようと書いてあります。

それでは早速やってみましょう。私たちのテーブルに置き換えるとStoreテーブルとGroupテーブルに__str__()メソッドを追加すればいいという事です。

models.py

それでは早速マイグレートして確認してみましょう。

docker-compose run web python3 manage.py makemigration shiftan
docker-compose run web python3 manage.py migrate

私たちはDockerを使っているので少しコードが違うかもしれません。

Django adminサイト

成功です!これでわかりやすくなりました。

ここまで読んでいただきありがとうございます。このNoteは自分の備忘録として書いていますが、このNoteが同じ悩みを持った他の人の力になれれば嬉しいです。もしよければスキやコメントよろしくお願いします!

参考資料

この記事が気に入ったらサポートをしてみませんか?