質問編集履歴

6

質問内容変更

2021/05/19 06:57

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 【Django models.py】モデルを紐づけても付属情報が消えな方法
1
+ 【Django models.py】テーブルを紐づけ一連のデータを取得・各々のテーブルで更新できるようにした
test CHANGED
@@ -2,20 +2,26 @@
2
2
 
3
3
 
4
4
 
5
- 名前と住所と趣味modelを作成したときに、
5
+ models.pyにて、「名前住所趣味」のクラスを作成したとします。
6
-
7
- 両者を紐づけたとします。
6
+
8
-
9
-
10
-
7
+
8
+
11
- その状態名前の情報を削除した場合
9
+ そのとき、各々新規作成・更新・削除ができるようにし、
12
-
10
+
13
- 住所と趣味の情報が失われないようにしたいで
11
+ かつ後に検索あるいはcsvなどで出力する際、それらの情報がまとめて入手できるようにするには、
12
+
13
+ どうしたらよいでしょうか?
14
+
15
+
16
+
17
+
14
18
 
15
19
 
16
20
 
17
21
  【具体的な例】
18
22
 
23
+
24
+
19
25
  |名前|住所|趣味|
20
26
 
21
27
  |:--|:--:|:--:|
@@ -28,7 +34,7 @@
28
34
 
29
35
 
30
36
 
31
- 上記のようなデータがあったとき、「斎藤」の情報を削除します。
37
+ 上記のようなデータがあったとき、例えば「斎藤」の情報を削除します。
32
38
 
33
39
  このとき、「斎藤」というデータは消えてよいのですが、
34
40
 
@@ -36,6 +42,20 @@
36
42
 
37
43
 
38
44
 
45
+ また、データを取得する際、
46
+
47
+ 田中の場合、
48
+
49
+ 名前:田中
50
+
51
+ 住所:北海道
52
+
53
+ 趣味:テニス
54
+
55
+ のように紐づけされた情報を取得できる状態にしたいです。
56
+
57
+
58
+
39
59
 
40
60
 
41
61
 
@@ -44,7 +64,17 @@
44
64
 
45
65
 
46
66
 
47
- エラーメッセージはありせん
67
+ 住所を主キーとして設定した際、エラーメッセージが出した
68
+
69
+ (`python manage.py shell`)
70
+
71
+
72
+
73
+ ```
74
+
75
+ TypeError: __str__ returned non-string (type Person)
76
+
77
+ ```
48
78
 
49
79
 
50
80
 
@@ -62,6 +92,34 @@
62
92
 
63
93
 
64
94
 
95
+
96
+
97
+
98
+
99
+ class Address(models.Model):
100
+
101
+
102
+
103
+ prefectures = models.CharField(max_length=20, verbose_name="都道府県")
104
+
105
+
106
+
107
+ def __str__(self):
108
+
109
+ return self.prefectures
110
+
111
+
112
+
113
+ class Meta:
114
+
115
+ verbose_name = "住所"
116
+
117
+
118
+
119
+
120
+
121
+
122
+
65
123
  class Person(models.Model):
66
124
 
67
125
 
@@ -70,6 +128,10 @@
70
128
 
71
129
 
72
130
 
131
+ address = models.ForeignKey(Address, on_delete=models.CACADE)
132
+
133
+
134
+
73
135
  def __str__(self):
74
136
 
75
137
  return self.name
@@ -84,44 +146,28 @@
84
146
 
85
147
 
86
148
 
149
+
150
+
87
- class Address(models.Model):
151
+ class Hobby(models.Model):
88
-
89
-
90
-
152
+
153
+
154
+
91
- prefectures = models.CharField(max_length=20, verbose_name="都道府県")
155
+ p_hobby = models.CharField(max_length=20, verbose_name="趣味")
156
+
157
+
158
+
159
+ person = models.ForeignKey(Person, on_delete=models.CACADE)
92
160
 
93
161
 
94
162
 
95
163
  def __str__(self):
96
164
 
97
- return self.prefectures
165
+ return self.p_hobby
98
166
 
99
167
 
100
168
 
101
169
  class Meta:
102
170
 
103
- verbose_name = "住所"
104
-
105
-
106
-
107
-
108
-
109
- class Hobby(models.Model):
110
-
111
-
112
-
113
- p_hobby = models.CharField(max_length=20, verbose_name="趣味")
114
-
115
-
116
-
117
- def __str__(self):
118
-
119
- return self.p_hobby
120
-
121
-
122
-
123
- class Meta:
124
-
125
171
  verbose_name = "趣味"
126
172
 
127
173
 
@@ -138,21 +184,13 @@
138
184
 
139
185
 
140
186
 
187
+ 上記のように、参照先以外の残り2つのclassに対して、
188
+
141
- `Address`と`Hobby`クラスに対して、`Person`クラスと紐づけするため、それぞれ`ForeignKey`設定ようと考えました。
189
+ ForeignKeyの記述行いまたが、エラーが出ました。
142
-
190
+
191
+
192
+
143
- しかしそうし場合`Person`情報を削除した一緒に`Adress`と`Hobby`消えてしまうため、
193
+ た、そもそもこの記述だと、Person情報を削除した、Hobbyの情報削除されてしまうことに今気づきまし
144
-
145
- どのように紐づけしたらよいかわかりませんでした。
146
-
147
-
148
-
149
- ```python
150
-
151
- # それぞれのclassに追加しようとした内容
152
-
153
- person = models.ForeignKey(Person, on_delete=models.CASCADE)
154
-
155
- ```
156
194
 
157
195
 
158
196
 

5

誤字修正

2021/05/19 06:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- prefectures = models.CharField(max_length=20, verbose_name="住所")
91
+ prefectures = models.CharField(max_length=20, verbose_name="都道府県")
92
92
 
93
93
 
94
94
 
@@ -100,7 +100,7 @@
100
100
 
101
101
  class Meta:
102
102
 
103
- verbose_name = "都道府県"
103
+ verbose_name = "住所"
104
104
 
105
105
 
106
106
 
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- p_hobby = models.CharField(max_length=20, verbose_name="住所")
113
+ p_hobby = models.CharField(max_length=20, verbose_name="趣味")
114
114
 
115
115
 
116
116
 

4

コード編集

2021/05/19 04:56

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -146,6 +146,16 @@
146
146
 
147
147
 
148
148
 
149
+ ```python
150
+
151
+ # それぞれのclassに追加しようとした内容
152
+
153
+ person = models.ForeignKey(Person, on_delete=models.CASCADE)
154
+
155
+ ```
156
+
157
+
158
+
149
159
  ### 補足情報(FW/ツールのバージョンなど)
150
160
 
151
161
 

3

文字修正

2021/05/19 04:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  その状態で名前の情報を削除した場合、
12
12
 
13
- 住所の情報が失われないようにしたいです。
13
+ 住所と趣味の情報が失われないようにしたいです。
14
14
 
15
15
 
16
16
 

2

誤字修正

2021/05/19 04:52

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 名前と住所modelを作成したときに、
5
+ 名前と住所と趣味modelを作成したときに、
6
6
 
7
7
  両者を紐づけたとします。
8
8
 
@@ -53,6 +53,10 @@
53
53
 
54
54
 
55
55
  ```python
56
+
57
+ # models.py
58
+
59
+
56
60
 
57
61
  from django.db import models
58
62
 

1

誤字修正

2021/05/19 04:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  名前と住所のmodelを作成したときに、
6
6
 
7
- 両者紐づけさせたとします。
7
+ 両者紐づけたとします。
8
8
 
9
9
 
10
10