回答編集履歴

6

f

2020/09/29 23:43

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ●forms.py
6
6
 
7
- ※修正点→ `__init__(...)`関数について、修正前ではMetaクラスの直下に入っていますが、そうせずに、**インデントを一段げます。**
7
+ ※修正点→ `__init__(...)`関数について、修正前ではMetaクラスの直下に入っていますが、そうせずに、**インデントを一段げます。**
8
8
 
9
9
  (=`__init__(...)`関数をCompanyFromクラス直下の関数にします)
10
10
 
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- def __init__(self, *args, **kwargs): # <======ここのインデントを一段げる
33
+ def __init__(self, *args, **kwargs): # <======ここのインデントを一段げる
34
34
 
35
35
  self.service_id = kwargs.pop('test_service_id')
36
36
 

5

f

2020/09/29 23:43

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -59,8 +59,6 @@
59
59
  from .models import Company
60
60
 
61
61
  from .forms import CompanyFrom
62
-
63
- from django.http import HttpResponseRedirect
64
62
 
65
63
 
66
64
 

4

1

2020/09/29 15:47

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
 
88
88
 
89
- ●urls,py (変更なし)
89
+ ●urls.py (変更なし)
90
90
 
91
91
  ```
92
92
 

3

2020/09/29 15:45

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -122,7 +122,9 @@
122
122
 
123
123
 
124
124
 
125
- pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いませんので
125
+ pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いません
126
+
127
+ 辞書型や属性付加等により動的なプログラミングを行う場面も多いため、
126
128
 
127
129
  typoを放置すると思わぬところでハマることがあります。
128
130
 

2

2020/09/29 15:01

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,4 +1,6 @@
1
1
  下記のように直してみた場合いかがでしょうか。
2
+
3
+
2
4
 
3
5
  ●forms.py
4
6
 
@@ -116,7 +118,7 @@
116
118
 
117
119
  sevice <--> service
118
120
 
119
- 等typoの変数定義が気になりました。
121
+ 、変数のtypoが気になりました。
120
122
 
121
123
 
122
124
 

1

回答を修正

2020/09/29 14:46

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,23 +1,139 @@
1
- views.py
1
+ 下記ように直してみた場合いかがでしょうか。
2
2
 
3
- ```
3
+ ●forms.py
4
4
 
5
- kwargs['test_sevice_id'] =self.kwargs['sevice_id'] #service_idメータ
5
+ ※修正点→ `__init__(...)`関数について、修正前でMetaクスの直下に入っていますが、そうせずに、**インデントを一段下げます。**
6
+
7
+ (=`__init__(...)`関数をCompanyFromクラス直下の関数にします)
8
+
9
+
6
10
 
7
11
 
8
12
 
9
13
  ```
10
14
 
15
+ from django import forms
16
+
17
+ from .models import Company
11
18
 
12
19
 
20
+
21
+ class CompanyFrom(forms.ModelForm):
22
+
13
-
23
+ class Meta:
24
+
25
+ model = Company
26
+
27
+ fields =('name','address','email','tel')
28
+
29
+
30
+
31
+ def __init__(self, *args, **kwargs): # <======ここのインデントを一段下げる
32
+
33
+ self.service_id = kwargs.pop('test_service_id')
34
+
35
+ super(CompanyFrom,self).__init__(*args,**kwargs)
36
+
37
+ if self.service_id == 1:
38
+
39
+ self.fields['email'].widget = forms.HiddenInput()
14
40
 
15
41
  ```
16
42
 
43
+ views.py、 urls,pyは下記のように元のままで構いません。
44
+
17
- kwargs['test_service_id'] =self.kwargs['sevice_id'] #service_idはパラメータ
45
+ (元ソースでservice_idsevice_idとなっていますが、そのままにしています)
18
46
 
19
47
 
20
48
 
49
+ ●views.py (変更なし)
50
+
51
+ (kwargs['test_**service**_id'] =self.kwargs['sevice_id']  に修正済み)
52
+
21
53
  ```
22
54
 
55
+ from django.views import generic
56
+
57
+ from .models import Company
58
+
59
+ from .forms import CompanyFrom
60
+
61
+ from django.http import HttpResponseRedirect
62
+
63
+
64
+
65
+ class CompanyCreateView(generic.CreateView):
66
+
67
+ template_name = 'form.html'
68
+
69
+ model = Company
70
+
71
+ form_class = CompanyFrom
72
+
73
+
74
+
75
+ def get_form_kwargs(self):
76
+
77
+ kwargs = super(CompanyCreateView,self).get_form_kwargs()
78
+
79
+ kwargs['test_service_id'] =self.kwargs['sevice_id'] #service_idはパラメータ
80
+
81
+ return kwargs
82
+
83
+ ```
84
+
85
+
86
+
87
+ ●urls,py (変更なし)
88
+
89
+ ```
90
+
91
+ from django.urls import path
92
+
93
+ from . import views
94
+
95
+
96
+
97
+ app_name = 'company'
98
+
99
+
100
+
101
+ urlpatterns = [
102
+
103
+ path('<int:company_id>/create/<int:sevice_id>', views.CompanyCreateView.as_view(), name='service_create'),
104
+
105
+ ]
106
+
107
+ ```
108
+
109
+
110
+
111
+
112
+
113
+ ※その他:
114
+
115
+ From <--> Form
116
+
117
+ sevice <--> service
118
+
23
- 修正した場合はいかがでしょうか
119
+ 等typoの変数定義が気なりました。
120
+
121
+
122
+
123
+ pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いませんので、
124
+
125
+ typoを放置すると思わぬところでハマることがあります。
126
+
127
+ なるべく正しい単語で変数を使うことをお勧めします。
128
+
129
+
130
+
131
+ また、質問元のソースのうち、forms.py等でimport文が省略されていましたが
132
+
133
+ djangoはいろいろなライブラリの関数とともに
134
+
135
+ 自分で定義したmodelやformをimportして利用することが多いため、
136
+
137
+ 省略せず記載していただくとこちらで再現しバグをチェックするときに助かります。
138
+
139
+ (一番の理想は、本当にプロジェクトの全てのソースを記載していただいて、こちらでもバグを完全に再現できるようになることです。秘密保持等で難しいかもしれませんが)