質問編集履歴
6
質問内容変更
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
|
-
名前と住所と趣味
|
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
|
151
|
+
class Hobby(models.Model):
|
88
|
-
|
89
|
-
|
90
|
-
|
152
|
+
|
153
|
+
|
154
|
+
|
91
|
-
p
|
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.p
|
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
|
-
|
189
|
+
ForeignKeyの記述を行いましたが、エラーが出ました。
|
142
|
-
|
190
|
+
|
191
|
+
|
192
|
+
|
143
|
-
|
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
誤字修正
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
コード編集
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
文字修正
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
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
名前と住所
|
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
誤字修正
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
|
|