質問編集履歴

2

目次の位置を変更

2022/05/24 10:34

投稿

Taka2401
Taka2401

スコア8

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

小目的、補足の追加

2022/05/24 10:29

投稿

Taka2401
Taka2401

スコア8

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/