質問編集履歴

2

修正

2021/06/19 22:40

投稿

ksy
ksy

スコア12

test CHANGED
@@ -1 +1 @@
1
- Django リレーションしたモデルの全ての値の取得方法につ
1
+ Django モデルからNestしたJSONを出力した
test CHANGED
@@ -1,40 +1,92 @@
1
- DjangoでBook, Publisher, Authorの3つのモデルを定義し、BookはPublisher, Authorとリレーションがあります
1
+ 下記のモデルBook, Author, Publisherから、
2
2
 
3
- Book.objects.filter(name="hoge")とすると、指定のbookのPublisherとAuthorのプライマリキーか取得することができないのですが、
3
+ DjangoRestFrameWorkのSerializerを用いてJsonを出力のですが、期待した結果になりません。
4
4
 
5
- このBookに関連するPubliserとAutorのすべてのカラムの値を抽出するにはどのようにすればよろでしょうか
5
+ どのようにすれば期待た結果を得られるでしょうか
6
6
 
7
7
 
8
8
 
9
+ ``` python
10
+
11
+ # 出力された結果
12
+
13
+ {
14
+
15
+ "title" : "タイトル",
16
+
17
+ "publication_date" : "2021-05-01",
18
+
19
+ "authors": [1, 2],
20
+
21
+ "publisher": 1,
22
+
23
+ }
24
+
25
+ ```
26
+
27
+
28
+
29
+ ``` python
30
+
31
+ # 期待された結果
32
+
33
+ {
34
+
9
- 具体的には以下のようなモデルです
35
+ 'pk': 0,
36
+
37
+ "title" : "タイトル",
38
+
39
+ "publication_date" : "2021-05-01",
40
+
41
+ "authors": [
42
+
43
+ {
44
+
45
+ "pk": 0,
46
+
47
+ "author_name": "著者1,
48
+
49
+ },
50
+
51
+ {
52
+
53
+ "pk": 1,
54
+
55
+ "author_name": "著者2,
56
+
57
+ },
58
+
59
+ ],
60
+
61
+ "publisher": {
62
+
63
+ "pk": 0,
64
+
65
+ "publisher_name": "出版社1",
66
+
67
+ },
68
+
69
+ }
70
+
71
+ ```
72
+
73
+
74
+
75
+
76
+
77
+
10
78
 
11
79
  ``` python
12
80
 
13
81
  class Publisher(models.Model):
14
82
 
15
- name = models.CharField(max_length=30)
83
+ publisher_name = models.CharField(max_length=30)
16
-
17
- website = models.URLField()
18
-
19
-
20
-
21
- def __str__(self):
22
-
23
- return self.name
24
84
 
25
85
 
26
86
 
27
87
  class Author(models.Model):
28
88
 
29
- first_name = models.CharField(max_length=30)
30
-
31
- last_name = models.CharField(max_length=40)
89
+ author_name = models.CharField(max_length=40)
32
-
33
-
34
-
35
- def __str__(self):
36
-
37
- return '%s %s' % (self.first_name, self.last_name)
38
90
 
39
91
 
40
92
 
@@ -48,30 +100,4 @@
48
100
 
49
101
  publication_date = models.DateField()
50
102
 
51
-
52
-
53
- def __str__(self):
54
-
55
- return self.title
56
-
57
103
  ```
58
-
59
-
60
-
61
- 期待する出力は以下の様なものです
62
-
63
- ``` python
64
-
65
- {
66
-
67
- "title" : title,
68
-
69
- "publication_date" : publiocation_date,
70
-
71
- "authors": [ first_name, last_name ],
72
-
73
- "publisher": [ name, website],
74
-
75
- }
76
-
77
- ```

1

書式の改善

2021/06/19 22:40

投稿

ksy
ksy

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,18 +1,12 @@
1
- Djangoで以下ようなモデルを定義しました。
1
+ DjangoでBook, Publisher, Author3つのモデルを定義し、BookはPublisher, Authorとリレーションがあり
2
+
3
+ Book.objects.filter(name="hoge")とすると、指定のbookのPublisherとAuthorのプライマリキーしか取得することができないのですが、
4
+
5
+ このBookに関連するPubliserとAutorのすべてのカラムの値を抽出するにはどのようにすればよろしいでしょうか?
2
6
 
3
7
 
4
8
 
5
- のモデルから、book.publication_dateが201701から201702ま全てのBookのデータを取得し、Bookに関連る全てのフィールドの値(publisher.name, publisher.website author.first_name, author.last_name, book.title, book.author ) をまとめて取得したいのですが、どのような方法で行えばいいのでしょうか?
6
-
7
-
8
-
9
- 期間の出力はfilterでできるようなのですが、
10
-
11
- 値の取得はBookからAuthor,Publisherの主キー以外を取得する方法がわかりませんでした。
12
-
13
- よろしくお願い致します。
14
-
15
-
9
+ 具体的には以下ようなモデルです
16
10
 
17
11
  ``` python
18
12
 
@@ -61,3 +55,23 @@
61
55
  return self.title
62
56
 
63
57
  ```
58
+
59
+
60
+
61
+ 期待する出力は以下の様なものです
62
+
63
+ ``` python
64
+
65
+ {
66
+
67
+ "title" : title,
68
+
69
+ "publication_date" : publiocation_date,
70
+
71
+ "authors": [ first_name, last_name ],
72
+
73
+ "publisher": [ name, website],
74
+
75
+ }
76
+
77
+ ```