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

回答編集履歴

6

f

2020/09/29 23:43

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  下記のように直してみた場合いかがでしょうか。
2
2
 
3
3
  ●forms.py
4
- ※修正点→ `__init__(...)`関数について、修正前ではMetaクラスの直下に入っていますが、そうせずに、**インデントを一段げます。**
4
+ ※修正点→ `__init__(...)`関数について、修正前ではMetaクラスの直下に入っていますが、そうせずに、**インデントを一段げます。**
5
5
  (=`__init__(...)`関数をCompanyFromクラス直下の関数にします)
6
6
 
7
7
 
@@ -14,7 +14,7 @@
14
14
  model = Company
15
15
  fields =('name','address','email','tel')
16
16
 
17
- def __init__(self, *args, **kwargs): # <======ここのインデントを一段げる
17
+ def __init__(self, *args, **kwargs): # <======ここのインデントを一段げる
18
18
  self.service_id = kwargs.pop('test_service_id')
19
19
  super(CompanyFrom,self).__init__(*args,**kwargs)
20
20
  if self.service_id == 1:

5

f

2020/09/29 23:43

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -29,7 +29,6 @@
29
29
  from django.views import generic
30
30
  from .models import Company
31
31
  from .forms import CompanyFrom
32
- from django.http import HttpResponseRedirect
33
32
 
34
33
  class CompanyCreateView(generic.CreateView):
35
34
  template_name = 'form.html'

4

1

2020/09/29 15:47

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -42,7 +42,7 @@
42
42
  return kwargs
43
43
  ```
44
44
 
45
- ●urls,py (変更なし)
45
+ ●urls.py (変更なし)
46
46
  ```
47
47
  from django.urls import path
48
48
  from . import views

3

2020/09/29 15:45

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -60,7 +60,8 @@
60
60
  sevice <--> service
61
61
  等、変数のtypoが気になりました。
62
62
 
63
- pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いませんので
63
+ pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いません
64
+ 辞書型や属性付加等により動的なプログラミングを行う場面も多いため、
64
65
  typoを放置すると思わぬところでハマることがあります。
65
66
  なるべく正しい単語で変数を使うことをお勧めします。
66
67
 

2

2020/09/29 15:01

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,4 +1,5 @@
1
1
  下記のように直してみた場合いかがでしょうか。
2
+
2
3
  ●forms.py
3
4
  ※修正点→ `__init__(...)`関数について、修正前ではMetaクラスの直下に入っていますが、そうせずに、**インデントを一段下げます。**
4
5
  (=`__init__(...)`関数をCompanyFromクラス直下の関数にします)
@@ -57,7 +58,7 @@
57
58
  ※その他:
58
59
  From <--> Form
59
60
  sevice <--> service
60
- typoの変数定義が気になりました。
61
+ 変数のtypoが気になりました。
61
62
 
62
63
  pythonはツールやライブラリを使わない限り事前の型チェックをデフォルトで行いませんので、
63
64
  typoを放置すると思わぬところでハマることがあります。

1

回答を修正

2020/09/29 14:46

投稿

sfdust
sfdust

スコア1137

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