質問編集履歴

6

追加

2020/08/11 02:53

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -148,7 +148,79 @@
148
148
 
149
149
  ```
150
150
 
151
-
151
+ form
152
+
153
+ ```
154
+
155
+ from django import forms
156
+
157
+ from .models import Post
158
+
159
+
160
+
161
+
162
+
163
+ class PostCreateForm(forms.ModelForm):
164
+
165
+
166
+
167
+ def __init__(self, *args, **kwargs):
168
+
169
+ super().__init__(*args, **kwargs)
170
+
171
+ for field in self.fields.values():
172
+
173
+ field.widget.attrs['class'] = 'form-control'
174
+
175
+
176
+
177
+ class Meta:
178
+
179
+ model = Post
180
+
181
+ fields = '__all__'
182
+
183
+
184
+
185
+
186
+
187
+ # これがモデルフォームセット
188
+
189
+ PostCreateFormSet = forms.modelformset_factory(
190
+
191
+ Post, form=PostCreateForm, extra=3
192
+
193
+ )
194
+
195
+ ```
196
+
197
+ model
198
+
199
+ ```
200
+
201
+ from django.db import models
202
+
203
+ from django.utils import timezone
204
+
205
+
206
+
207
+
208
+
209
+ class Post(models.Model):
210
+
211
+ title = models.CharField('タイトル', max_length=200)
212
+
213
+ text = models.TextField('本文')
214
+
215
+ date = models.DateTimeField('日付', default=timezone.now)
216
+
217
+
218
+
219
+ def __str__(self):
220
+
221
+ return self.title
222
+
223
+ ```
152
224
 
153
225
  form.fieldとした場合の保存方法をご存知の方はいらっしゃいませんか。
154
226
 

5

修正

2020/08/11 02:53

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -26,11 +26,21 @@
26
26
 
27
27
  djangoのformsetを使っています。
28
28
 
29
- そのままのtemplateだと入力して送信をクリックすると、formset.save()は有効でデータベースに保存されます。そしてページを開きなおしても消えません。
29
+ そのままのtemplateだと入力して送信をクリックすると、formset.save()は有効でデータベースに保存されます。そしてページを開きなおしても消えません。お手本どおりに動きます。
30
30
 
31
31
 
32
32
 
33
- ```
33
+ ```post_formset.html
34
+
35
+ {% extends 'app/base.html' %}
36
+
37
+
38
+
39
+ {% block content %}
40
+
41
+ <form action="" method="post">
42
+
43
+ <div class="row">
34
44
 
35
45
  {% for form in formset %}
36
46
 
@@ -42,6 +52,18 @@
42
52
 
43
53
  {% endfor %}
44
54
 
55
+ </div>
56
+
57
+ {{ formset.management_form }}
58
+
59
+ {% csrf_token %}
60
+
61
+ <button type="submit" class="btn btn-primary">送信</button>
62
+
63
+ </form>
64
+
65
+ {% endblock %}
66
+
45
67
  ```
46
68
 
47
69
 
@@ -51,6 +73,16 @@
51
73
 
52
74
 
53
75
  ```
76
+
77
+ {% extends 'app/base.html' %}
78
+
79
+
80
+
81
+ {% block content %}
82
+
83
+ <form action="" method="post">
84
+
85
+ <div class="row">
54
86
 
55
87
  {% for form in formset %}
56
88
 
@@ -66,19 +98,53 @@
66
98
 
67
99
  {% endfor %}
68
100
 
69
- ```
101
+ </div>
70
102
 
103
+ {{ formset.management_form }}
104
+
105
+ {% csrf_token %}
106
+
107
+ <button type="submit" class="btn btn-primary">送信</button>
108
+
109
+ </form>
110
+
71
- 保存方法
111
+ {% endblock %}
72
112
 
73
113
  ```
74
114
 
115
+ view
116
+
117
+ ```
118
+
119
+ from django.shortcuts import render, redirect
120
+
121
+ from .forms import PostCreateFormSet
122
+
123
+
124
+
125
+
126
+
127
+ def add(request):
128
+
75
- formset = PostCreateFormSet(request.POST or None)
129
+ formset = PostCreateFormSet(request.POST or None)
76
130
 
77
131
  if request.method == 'POST' and formset.is_valid():
78
132
 
79
133
  formset.save()
80
134
 
81
-     return redirect('app:index')
135
+ return redirect('app:index')
136
+
137
+
138
+
139
+ context = {
140
+
141
+ 'formset': formset
142
+
143
+ }
144
+
145
+
146
+
147
+ return render(request, 'app/post_formset.html', context)
82
148
 
83
149
  ```
84
150
 

4

追加

2020/08/11 02:49

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -10,13 +10,23 @@
10
10
 
11
11
 
12
12
 
13
+ 追加 
14
+
15
+ ありがとうございます。
16
+
17
+ 参考にしたかたはgithubに出していらっしゃるのでそれをそのまま使っています。
18
+
19
+ https://github.com/naritotakizawa/django-modelformset-sample
20
+
21
+
22
+
13
23
 
14
24
 
15
25
 
16
26
 
17
27
  djangoのformsetを使っています。
18
28
 
19
- 以下ようなtemplateだとformset.save()は有効で保存されます。
29
+ ままのtemplateだと入力して送信をクリックすると、formset.save()は有効でデータベースに保存されます。そしてページを開きなおしても消えません。
20
30
 
21
31
 
22
32
 
@@ -24,7 +34,11 @@
24
34
 
25
35
  {% for form in formset %}
26
36
 
37
+ <div class="col-sm-4">
38
+
27
- {{ form }}
39
+ {{ form.as_p }}
40
+
41
+ </div>
28
42
 
29
43
  {% endfor %}
30
44
 
@@ -32,9 +46,7 @@
32
46
 
33
47
 
34
48
 
35
- しかし以下のようとformset.save()が反映されません
49
+ しかし以下のように変更してみるとformset.save()が反映されていないようで、ページを開きなおすと消えてしいます
36
-
37
- なおnameは仮称です。
38
50
 
39
51
 
40
52
 
@@ -42,9 +54,15 @@
42
54
 
43
55
  {% for form in formset %}
44
56
 
45
-       {{ form.name }}
57
+ <div class="col-sm-4">
46
58
 
59
+ {{ form.title }}
60
+
61
+ {{ form.text }}
62
+
47
-       {{ form.name2 }}
63
+ {{ form.date }}
64
+
65
+ </div>
48
66
 
49
67
  {% endfor %}
50
68
 

3

追加

2020/08/11 01:16

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  djangoのformsetを使っています。
18
18
 
19
- 以下のようなtemplateだと保存されます。
19
+ 以下のようなtemplateだとformset.save()は有効で、保存されます。
20
20
 
21
21
 
22
22
 
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- しかし以下のようだとできません。
35
+ しかし以下のようだとformset.save()が反映されません。
36
36
 
37
37
  なおnameは仮称です。
38
38
 

2

追加

2020/08/10 23:29

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,19 @@
1
+ 追加
2
+
3
+ 返信ありがとうございます。
4
+
5
+ https://blog.narito.ninja/detail/30
6
+
7
+ にあるお手本を用いて実装しようとしています。
8
+
9
+ この中のpost_formset.htmlの部分を以下のように変えたいです。
10
+
11
+
12
+
13
+
14
+
15
+
16
+
1
17
  djangoのformsetを使っています。
2
18
 
3
19
  以下のようなtemplateだと保存されます。
@@ -17,6 +33,8 @@
17
33
 
18
34
 
19
35
  しかし以下のようだとできません。
36
+
37
+ なおnameは仮称です。
20
38
 
21
39
 
22
40
 

1

追加

2020/08/10 23:26

投稿

keraker
keraker

スコア46

test CHANGED
File without changes
test CHANGED
@@ -32,6 +32,20 @@
32
32
 
33
33
  ```
34
34
 
35
+ 保存方法
36
+
37
+ ```
38
+
39
+ formset = PostCreateFormSet(request.POST or None)
40
+
41
+ if request.method == 'POST' and formset.is_valid():
42
+
43
+ formset.save()
44
+
45
+     return redirect('app:index')
46
+
47
+ ```
48
+
35
49
 
36
50
 
37
51
  form.fieldとした場合の保存方法をご存知の方はいらっしゃいませんか。