teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

修正

2018/07/17 23:31

投稿

nokonoko_1203
nokonoko_1203

スコア17

title CHANGED
File without changes
body CHANGED
@@ -180,10 +180,10 @@
180
180
  def form_valid(self, form):
181
181
  form.save() # ここで保存
182
182
 
183
- for cleaned_data in form.cleaned_data:
183
+ for f in form:
184
- Purchase_history.objects.create(name=cleaned_data["name"],
184
+ Purchase_history.objects.create(name=f.cleaned_data["name"],
185
- price=cleaned_data["price"])
185
+ price=f.cleaned_data["price"])
186
-
186
+
187
187
  return super().form_valid(form)
188
188
 
189
189
 
@@ -217,4 +217,19 @@
217
217
  class Meta:
218
218
  model = Purchase_history
219
219
  fields = ("name", "price")
220
- ```
220
+ ```
221
+
222
+ ``` Local vars
223
+ __class__
224
+ <class 'stockpile.views.Shopping_listCreateView'>
225
+
226
+ f
227
+ <Shopping_listForm bound=True, valid=True, fields=(name;price;id;DELETE)>
228
+
229
+ form
230
+ <django.forms.formsets.Shopping_listFormFormSet object at 0x7f1e95ec36a0>
231
+
232
+ self
233
+ <stockpile.views.Shopping_listCreateView object at 0x7f1e95df7518>
234
+ ```
235
+ fオブジェクトにはnameが存在しているように見えるのですが、エラーとなります

1

修正したコードを追記

2018/07/17 23:30

投稿

nokonoko_1203
nokonoko_1203

スコア17

title CHANGED
File without changes
body CHANGED
@@ -136,4 +136,85 @@
136
136
  ・アップデートビューから変遷先のテンプレートにリダイレクト
137
137
 
138
138
 
139
- で、実装できるのかな。と考えておりましたが、そもそもそのやりかたも分からず、ご教授頂きたいです。
139
+ で、実装できるのかな。と考えておりましたが、そもそもそのやりかたも分からず、ご教授頂きたいです。
140
+
141
+ 追記:修正しましたが解決に至っておりません。コードは下記の通りです。
142
+ ```python
143
+ # views.py
144
+
145
+ # Shopping_listView
146
+
147
+ class Shopping_listView(ListView):
148
+ model = Shopping_list
149
+ paginate_by = 30
150
+ template_name = "stockpile/shopping_list.html"
151
+ queryset = Shopping_list.objects.all()
152
+
153
+ def get_context_data(self, **kwargs):
154
+ context = super().get_context_data(**kwargs)
155
+ '''
156
+ 辞書のリストが帰ってくる
157
+ [{"id": 1, "price":500......}]
158
+ '''
159
+ all_list_price = Shopping_list.objects.all().values("id", "price")
160
+ sum_price = 0
161
+ for v in all_list_price:
162
+ price = v["price"]
163
+ sum_price += price
164
+ context['sum_price'] = sum_price
165
+ return context
166
+
167
+
168
+ class Shopping_listCreateView(FormView):
169
+ # model = Shopping_list
170
+ # fields = ["name", "price"]
171
+ form_class = Shopping_listFormSet
172
+ template_name = "stockpile/shopping_list_form.html"
173
+ success_url = "/stockpile/shopping_list/"
174
+
175
+ def get_context_data(self, **kwargs):
176
+ context = super().get_context_data(**kwargs)
177
+ context['Week_menu'] = Week_menu.objects.all()
178
+ return context
179
+
180
+ def form_valid(self, form):
181
+ form.save() # ここで保存
182
+
183
+ for cleaned_data in form.cleaned_data:
184
+ Purchase_history.objects.create(name=cleaned_data["name"],
185
+ price=cleaned_data["price"])
186
+
187
+ return super().form_valid(form)
188
+
189
+
190
+ def delete_shopping_list(request, shopping_list_id):
191
+ shopping_list = get_object_or_404(Shopping_list, id=shopping_list_id)
192
+ shopping_list.delete()
193
+ shopping_list = Shopping_list.objects.all()
194
+ context = {'object_list': shopping_list}
195
+ return render(request, 'stockpile/shopping_list.html', context)
196
+ ```
197
+ ```python
198
+ forms.py
199
+
200
+ class Shopping_listForm(ModelForm):
201
+
202
+ class Meta:
203
+ model = Shopping_list
204
+ fields = ("name", "price")
205
+
206
+
207
+ Shopping_listFormSet = modelformset_factory(
208
+ Shopping_list,
209
+ form=Shopping_listForm,
210
+ fields=("name", "price"),
211
+ extra=3,
212
+ can_delete=True
213
+ )
214
+
215
+ class Purchase_historyForm(ModelForm):
216
+
217
+ class Meta:
218
+ model = Purchase_history
219
+ fields = ("name", "price")
220
+ ```