質問編集履歴

2

vies.pyとforms.pyを追記させていただきました。

2018/04/04 02:35

投稿

ebifry
ebifry

スコア14

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ```Python
28
28
 
29
- # Django models.py
29
+ # Django apps/models.py
30
30
 
31
31
  from django.db import models
32
32
 
@@ -81,3 +81,121 @@
81
81
 
82
82
 
83
83
  よろしくお願いいたします。
84
+
85
+
86
+
87
+ ---
88
+
89
+ 平成30年4月4日(水)追記。
90
+
91
+ コメントをいただきましてありがとうございます。views.pyを追記いたします。
92
+
93
+ Django標準のdjango.vews.generic.edit を利用しているはず・・・。
94
+
95
+ ですので最終的にform.save()される前に値が消えてるのでしょうか?。
96
+
97
+ ```python
98
+
99
+ # # Django apps/views.py
100
+
101
+ from django.contrib.auth.mixins import LoginRequiredMixin
102
+
103
+ from django.urls import reverse_lazy
104
+
105
+ from django.views.generic import ListView, DetailView
106
+
107
+ from django.views.generic.edit import CreateView, UpdateView, DeleteView
108
+
109
+ from .models import Item
110
+
111
+ from .forms import ItemForm
112
+
113
+
114
+
115
+ # 詳細画面
116
+
117
+ class ItemDetailView(LoginRequiredMixin, DetailView):
118
+
119
+ model = Item
120
+
121
+
122
+
123
+
124
+
125
+ # 登録画面
126
+
127
+ class ItemCreateView(LoginRequiredMixin, CreateView):
128
+
129
+ model = Item
130
+
131
+ form_class = ItemForm
132
+
133
+ success_url = reverse_lazy('index')
134
+
135
+
136
+
137
+
138
+
139
+ # 更新画面
140
+
141
+ class ItemUpdateView(LoginRequiredMixin, UpdateView):
142
+
143
+ model = Item
144
+
145
+ form_class = ItemForm
146
+
147
+ success_url = reverse_lazy('index')
148
+
149
+
150
+
151
+
152
+
153
+ # 削除画面
154
+
155
+ class ItemDeleteView(LoginRequiredMixin, DeleteView):
156
+
157
+ model = Item
158
+
159
+ success_url = reverse_lazy('index')
160
+
161
+ ```
162
+
163
+
164
+
165
+ forms.py はこのようになっています。
166
+
167
+ ```python
168
+
169
+ # apps/forms.py
170
+
171
+ from django import forms
172
+
173
+ from .models import Item
174
+
175
+
176
+
177
+
178
+
179
+ class ItemForm(forms.Form):
180
+
181
+ class Meta:
182
+
183
+ model = Item
184
+
185
+ fields = ('name', 'age', 'publish')
186
+
187
+ widgets = {
188
+
189
+ 'name': forms.TextInput(attrs={'placeholder': '氏名の間は空白不要'}),
190
+
191
+ 'age': forms.NumberInput(attrs={'min': 0}),
192
+
193
+ 'publish': forms.Textarea(attrs={'rows': 4}),
194
+
195
+ }
196
+
197
+ ```
198
+
199
+ これで不足ありませんでしょうか?
200
+
201
+ よろしくお願いいたします。

1

実際にエラーが出たコードと異なっていたため、models.pyを修正。実行後のエラーについて追記しました。

2018/04/04 02:35

投稿

ebifry
ebifry

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ すいません、古いコードで投稿してしまったので質問を修正させていただきました。
2
+
1
3
  お世話になります。
2
4
 
3
5
  下記環境にて簡単なユーザー管理ツールを作成中です。
@@ -44,7 +46,7 @@
44
46
 
45
47
  blank=True,
46
48
 
47
- validators=[validators.MinValueValidator(0), validators.MaxValueValidator(99), validators.integer_validator(), ]
49
+ validators=[validators.MinValueValidator(0), validators.MaxValueValidator(99), validators.integer_validator, ]
48
50
 
49
51
  )
50
52
 
@@ -60,11 +62,21 @@
60
62
 
61
63
  validatorsで年齢入力範囲を0〜99才にし、整数かどうかチェックをしたいと思います。
62
64
 
63
- integer_validatorが整数チェックと考えてのですが、引数がどう渡せば良いかがわからず困っています。
65
+ ageカラムにカタカナや英数字を入力した後、登録しようとすると「Enter a valid integer.」とエラーメッセージ表示させたいのですが、
64
66
 
67
+ ```python
65
68
 
69
+ IntegrityError at /admin/cms/item/add/
66
70
 
71
+ null value in column "age" violates not-null constraint
72
+
73
+ ```
74
+
75
+ 値がnullだと怒られます。
76
+
77
+ integer_validatorが整数チェックと考えているのですが、引数がどう渡せば良いのか?そもそも使い方が違うのか・・・悩んでいます。
78
+
67
- そも使い方が違うのか・・・もっと推奨する方法があるなどご教授いただけると幸いです。
79
+ もっと推奨する方法があるなどご教授いただけると幸いです。
68
80
 
69
81
 
70
82