質問編集履歴
2
目次の位置を変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
**小目的**
|
7
7
|
共通化するために、下記のコードに記載してあるFruitクラスのインスタンスを
|
8
|
-
HogeMixinのクラスに渡
|
8
|
+
HogeMixinのクラスに渡したいです。
|
9
9
|
|
10
10
|
```
|
11
11
|
class Fruit(models.Model):
|
@@ -20,15 +20,7 @@
|
|
20
20
|
self.kind = self.quantity.kind
|
21
21
|
|
22
22
|
return super().save(*args, **kwargs)
|
23
|
-
```
|
24
23
|
|
25
|
-
### 発生している問題・エラーメッセージ
|
26
|
-
|
27
|
-
共通化するコードを作成して、正しく動作するか単体テストで確認したところ
|
28
|
-
下記のエラーが表示されました。
|
29
|
-
(コードを共通化する前は上記のコードで、テストをクリアしていたのでテスト自体に問題はないと思います。)
|
30
|
-
```
|
31
|
-
AttributeError: 'HogeMixin' object has no attribute 'quantity'
|
32
24
|
```
|
33
25
|
|
34
26
|
### 該当のソースコード
|
@@ -43,6 +35,7 @@
|
|
43
35
|
self.kind = self.quantity.kind
|
44
36
|
|
45
37
|
return super().save(*args, **kwargs)
|
38
|
+
|
46
39
|
```
|
47
40
|
```python
|
48
41
|
class Fruit(HogeMixin):
|
@@ -52,6 +45,16 @@
|
|
52
45
|
|
53
46
|
a = HogeMixin()
|
54
47
|
a.save()
|
48
|
+
|
49
|
+
```
|
50
|
+
|
51
|
+
### 発生している問題・エラーメッセージ
|
52
|
+
|
53
|
+
上記のコードを作成して、正しく動作するか単体テストを実行したところ
|
54
|
+
下記のエラーが表示されました。
|
55
|
+
(コードを共通化する前は、テストをクリアしていたのでテスト自体に問題はないと思います。)
|
56
|
+
```
|
57
|
+
AttributeError: 'HogeMixin' object has no attribute 'quantity'
|
55
58
|
```
|
56
59
|
|
57
60
|
### 試したこと
|
1
小目的、補足の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
### 実現したいこと
|
2
|
-
|
2
|
+
**大目的**
|
3
3
|
いくつかのクラスで下記のようなsaveメソッドのオーバーライドが複数あるので、
|
4
4
|
それらを一つのコードにまとめて共通化したいです。
|
5
|
+
|
6
|
+
**小目的**
|
7
|
+
共通化するために、下記のコードに記載してあるFruitクラスのインスタンスを
|
8
|
+
HogeMixinのクラスに渡す必要があると思います。
|
9
|
+
|
5
10
|
```
|
6
11
|
class Fruit(models.Model):
|
7
12
|
quantity = models.ForeignKey("Quantity", on_delete=models.CASCADE, null=True)
|
@@ -29,10 +34,11 @@
|
|
29
34
|
### 該当のソースコード
|
30
35
|
|
31
36
|
```python
|
37
|
+
# 共通化するために、mixinを作成
|
32
38
|
class HogeMixin(models.Model):
|
33
39
|
def save(self, *args, **kwargs):
|
34
40
|
if self._state.adding:
|
35
|
-
if self.quantity:
|
41
|
+
if self.quantity: # selfにFruitのインスタンスを渡したいです。
|
36
42
|
self.kind = self.quantity.kind
|
37
43
|
self.kind = self.quantity.kind
|
38
44
|
|
@@ -52,7 +58,7 @@
|
|
52
58
|
```ここに言語を入力
|
53
59
|
AttributeError: 'HogeMixin' object has no attribute 'quantity'
|
54
60
|
```
|
55
|
-
のエラーが出るということは、`selfはHogeMixinを指している`と考えています。
|
61
|
+
のエラーが出るということは、 `if self.quantity:`の`selfはHogeMixinを指している`と考えています。
|
56
62
|
|
57
63
|
下記の記事を参考に、継承元(HogeMixin)で継承先(Fruit)のインスタンスを参照するようにコードを書き換えました。
|
58
64
|
https://naruport.com/blog/2019/8/24/python-tutorial-class-extends/
|