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

質問編集履歴

4

質問内容変更

2018/08/02 08:25

投稿

isshi
isshi

スコア11

title CHANGED
@@ -1,1 +1,1 @@
1
- formsetを利用したデータの複数登録について
1
+ formsetを利用したデータの一括削除について
body CHANGED
@@ -1,9 +1,12 @@
1
+ Django初心者です。
1
- djangoのformsetを利用してタの複数登録を試みています。
2
+ Djangoのformsetを利用してレコドを複数登録後、
2
- ~~登録画面までは表示できたのですが、実際の登録処理がまくせん~~
3
+ 同様にformsetを利用して一括削除しよとしていま
4
+ formsetに追加した削除チェックボックスにチェック後、submitしても削除される事なくエラー表示されず指定画面に遷移する状態です。
3
5
 
4
- 登録画面表示時にモデルに登録されているデータが全て表示されるのですが、
6
+ ~~登録画面表示時にモデルに登録されているデータが全て表示されるのですが、
5
- これを表示させない、または特定条件のデータのみ表示させるにはどうしたら良いでしょうか。
7
+ これを表示させない、または特定条件のデータのみ表示させるにはどうしたら良いでしょうか。~~
6
8
 
9
+ 削除処理をする上でどこが誤っているのかわからない状態です。
7
10
  どうぞご教授のほどよろしくお願いします。
8
11
 
9
12
  # models.py
@@ -32,14 +35,6 @@
32
35
  created_at = models.DateTimeField('登録日時', default=datetime.now)
33
36
  updated_at = models.DateTimeField('更新日時', auto_now=True, blank=True, null=True) # 更新日時
34
37
 
35
- # updated_at = models.DateTimeField()
36
-
37
- # def save(self, *args, **kwargs):
38
- # auto_now = kwargs.pop('updated_at_auto_now', True)
39
- # if auto_now:
40
- # self.updated_at = datetime.now()
41
- # super(Book, self).save(*args, **kwargs)
42
-
43
38
  def __str__(self):
44
39
  return self.name
45
40
  ```
@@ -49,7 +44,6 @@
49
44
  from django import forms
50
45
  from .models import Book,Impression
51
46
 
52
-
53
47
  class BookCreateForm(forms.ModelForm):
54
48
  """書籍のフォーム"""
55
49
  def __init__(self, *args, **kwargs):
@@ -61,10 +55,8 @@
61
55
  model = Book
62
56
  fields = ('bookType', 'name', 'publisher', 'page', 'impressionCount',)
63
57
 
64
-
65
58
  BookFormSet = forms.modelformset_factory(
66
- Book, form=BookCreateForm, extra=3, can_delete=True
59
+ Book, form=BookCreateForm, extra=0, can_delete=True)
67
- )
68
60
  ```
69
61
 
70
62
  # views.py
@@ -104,42 +96,24 @@
104
96
  )
105
97
  return queryset
106
98
 
107
- """書籍追加"""
108
- @method_decorator(login_required, name='dispatch')
109
- class AddView(generic.CreateView):
110
- model = Book
111
- template_name = 'book_add.html'
112
- form_class = BookCreateForm
113
- success_url = reverse_lazy('bookmgr:index') # /bookmgr/
114
99
 
115
- def form_valid(self, form):
116
- ''' バリデーションを通った時 '''
117
- book = form.save(commit=False)
118
- # book.editer = request.user.id
119
- form.instance.editer = str(self.request.user)
120
- book.save()
121
- # 追加のとき
122
- if 'save' in self.request.POST:
123
- messages.success(self.request, "追加しました")
124
- return redirect('bookmgr:index')
125
-
126
- def form_invalid(self, form):
127
- ''' バリデーションに失敗した時 '''
128
- messages.warning(self.request, "追加できませんでした")
129
- return super().form_invalid(form)
130
-
131
-
132
- class multiAddView(generic.FormView):
100
+ class multiEditView(generic.FormView):
133
- template_name = 'book_multiAdd.html'
101
+ template_name = 'book_multiEdit.html'
134
102
  form_class = BookFormSet
135
103
  success_url = reverse_lazy('bookmgr:index')
136
104
 
105
+ def get_form(self, form_class=None):
106
+ return BookFormSet(self.request.POST or None)
107
+
137
108
  def form_valid(self, form):
109
+ for fm in form:
138
- form.save() # ここで保存される
110
+ book = fm.save(commit=False)
111
+ book.editer = str(self.request.user)
112
+ book.save()
139
113
  return super().form_valid(form)
140
114
  ```
141
115
 
142
- # book_multiAdd.html
116
+ # book_multiEdit.html
143
117
  ```
144
118
  {% block title %}一括登録{% endblock title %}
145
119
 
@@ -162,8 +136,11 @@
162
136
  {{ form.management_form }}
163
137
  {% for fm in form %}
164
138
  {{ fm.id }}
139
+ {{ fm.errors }}
165
140
  <table class="table">
166
141
  <tr>
142
+ <th>書籍タイプ</th>
143
+ <td>{{ fm.bookType }}</td>
167
144
  <th>書籍名</th>
168
145
  <td>{{ fm.name }}</td>
169
146
  <th>出版社</th>
@@ -176,8 +153,7 @@
176
153
  {% endif %}
177
154
  </tr>
178
155
  </table>
179
- {% endfor %}
156
+ {% endfor %}
180
-
181
157
  <button type="submit" class="btn btn-primary">送信</button>
182
158
  <a href="{% url 'bookmgr:index' %}" class="btn btn-primary btn-sm">戻る</a>
183
159
  {% csrf_token %}

3

質問内容更新

2018/08/02 08:25

投稿

isshi
isshi

スコア11

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  djangoのformsetを利用してデータの複数登録を試みています。
2
- 登録画面までは表示できたのですが、実際の登録処理がうまくいきません。
2
+ ~~登録画面までは表示できたのですが、実際の登録処理がうまくいきません。~~
3
3
 
4
- また登録画面表示時にモデルに登録されているデータが全て表示されるのですが、
4
+ 登録画面表示時にモデルに登録されているデータが全て表示されるのですが、
5
5
  これを表示させない、または特定条件のデータのみ表示させるにはどうしたら良いでしょうか。
6
6
 
7
7
  どうぞご教授のほどよろしくお願いします。

2

補足追加

2018/08/02 03:19

投稿

isshi
isshi

スコア11

title CHANGED
File without changes
body CHANGED
@@ -205,4 +205,7 @@
205
205
 
206
206
  ]
207
207
 
208
- ```
208
+ ```
209
+ ### その他、補足情報
210
+ ・Django:2.0.7
211
+ ・Python:3.6.5

1

内容変更

2018/08/01 02:47

投稿

isshi
isshi

スコア11

title CHANGED
File without changes
body CHANGED
@@ -199,13 +199,10 @@
199
199
  path('add/', views.AddView.as_view(), name='book_add'), # 追加
200
200
  path('multiadd/', views.multiAddView.as_view(), name='book_multiadd'),
201
201
 
202
- path('update/<int:pk>/', views.UpdateView.as_view(), name='book_update'), # 編集
203
- path('delete/<int:pk>/', views.DeleteView.as_view(), name='book_delete'), # 削除
204
202
  # ログアウト
205
203
  path('accounts/logout/', auth_views.LogoutView.as_view(), name='logout'),
206
- # IP
207
- path('ip/',views.ip,name='ip'),
208
204
 
205
+
209
206
  ]
210
207
 
211
208
  ```