前提・実現したいこと
models.pyにて、「名前」と「住所」と「趣味」のクラスを作成したとします。
そのとき、各々で新規作成・更新・削除ができるようにし、
かつ後に検索あるいはcsvなどで出力する際、それらの情報がまとめて入手できるようにするには、
どうしたらよいでしょうか?
【具体的な例】
名前 | 住所 | 趣味 |
---|---|---|
田中 | 北海道 | テニス |
佐藤 | 新潟 | サッカー |
斎藤 | 大分 | 野球 |
上記のようなデータがあったとき、例えば「斎藤」の情報を削除します。
このとき、「斎藤」というデータは消えてよいのですが、
「大分」「野球」という情報は削除したくありません。(次に流用できるため)
また、データを取得する際、
田中の場合、
名前:田中
住所:北海道
趣味:テニス
のように紐づけされた情報を取得できる状態にしたいです。
発生している問題・エラーメッセージ
住所を主キーとして設定した際、エラーメッセージが出ました。
(python manage.py shell
)
TypeError: __str__ returned non-string (type Person)
該当のソースコード
python
1# models.py 2 3from django.db import models 4 5 6 7class Address(models.Model): 8 9 prefectures = models.CharField(max_length=20, verbose_name="都道府県") 10 11 def __str__(self): 12 return self.prefectures 13 14 class Meta: 15 verbose_name = "住所" 16 17 18 19class Person(models.Model): 20 21 name = models.CharField(max_length=20, verbose_name="名前") 22 23 address = models.ForeignKey(Address, on_delete=models.CACADE) 24 25 def __str__(self): 26 return self.name 27 28 class Meta: 29 verbose_name = "個人情報" 30 31 32 33class Hobby(models.Model): 34 35 p_hobby = models.CharField(max_length=20, verbose_name="趣味") 36 37 person = models.ForeignKey(Person, on_delete=models.CACADE) 38 39 def __str__(self): 40 return self.p_hobby 41 42 class Meta: 43 verbose_name = "趣味" 44 45 46
試したこと
上記のように、参照先以外の残り2つのclassに対して、
ForeignKeyの記述を行いましたが、エラーが出ました。
また、そもそもこの記述だと、Personの情報を削除した後、Hobbyの情報も削除されてしまうことに今気づきました。
補足情報(FW/ツールのバージョンなど)
Django 3.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/05/31 06:56