質問編集履歴
1
文章とタイトルの見直し
    
        title	
    CHANGED
    
    | @@ -1,1 +1,1 @@ | |
| 1 | 
            -
            <python,django> | 
| 1 | 
            +
            <python,django>別のアプリケーションのclass内関数をimportしたい
         | 
    
        body	
    CHANGED
    
    | @@ -41,16 +41,25 @@ | |
| 41 41 | 
             
                        └─polls
         | 
| 42 42 |  | 
| 43 43 |  | 
| 44 | 
            -
             | 
| 44 | 
            +
            pollsアプリーケーションに存在するmodels.pyの
         | 
| 45 45 |  | 
| 46 46 | 
             
            ```python
         | 
| 47 47 | 
             
            class Question(models.Model):
         | 
| 48 48 | 
             
                question_text = models.CharField(max_length=200)
         | 
| 49 49 | 
             
                pub_date = models.DateTimeField('date published')
         | 
| 50 50 | 
             
                date_limit = models.DateTimeField('公開期限', default = timezone.now() + timedelta(days=7) )
         | 
| 51 | 
            +
             | 
| 52 | 
            +
             | 
| 53 | 
            +
                def is_date_limit(self):
         | 
| 54 | 
            +
                    # まだ公開期限を過ぎていないならTrue
         | 
| 55 | 
            +
                    now = timezone.now()
         | 
| 56 | 
            +
                    return now <= self.date_limit
         | 
| 57 | 
            +
             | 
| 58 | 
            +
             | 
| 59 | 
            +
             | 
| 51 60 | 
             
            ```
         | 
| 52 61 |  | 
| 53 | 
            -
             | 
| 62 | 
            +
            question_textを取得して、別アプリケーションであるboardアプリケーションに表示しようとしています。
         | 
| 54 63 |  | 
| 55 64 |  | 
| 56 65 | 
             
            ### 該当のソースコード
         | 
| @@ -60,6 +69,10 @@ | |
| 60 69 |  | 
| 61 70 | 
             
            ```python
         | 
| 62 71 |  | 
| 72 | 
            +
            import sys
         | 
| 73 | 
            +
            sys.path.append('../')
         | 
| 74 | 
            +
            from polls.models import Question
         | 
| 75 | 
            +
             | 
| 63 76 | 
             
            class FormAndListView(FormView, ListView, TemplateResponseMixin):
         | 
| 64 77 | 
             
                def get(self, request, *args, **kwargs):
         | 
| 65 78 | 
             
                    question = Question.objects.all() ←追加
         | 
| @@ -77,7 +90,7 @@ | |
| 77 90 |  | 
| 78 91 | 
             
            ```
         | 
| 79 92 |  | 
| 80 | 
            -
            <p><a href="http://localhost:8000/polls/">現在 | 
| 93 | 
            +
            <p><a href="http://localhost:8000/polls/">現在投票中のアンケート一覧{% if question.is_date_limit %}{% for questions in question %}{{ questions.question_text }}{% endfor %}{% endif %}</a></p>
         | 
| 81 94 |  | 
| 82 95 |  | 
| 83 96 | 
             
            ```
         | 
| @@ -86,35 +99,64 @@ | |
| 86 99 | 
             
            この状態ですと
         | 
| 87 100 | 
             
            
         | 
| 88 101 |  | 
| 89 | 
            -
            一番上にquestion_textの内容が表示され、ここまでは問題ありませ | 
| 102 | 
            +
            一番上にquestion_textの内容が表示され、ここまでは問題ありませでした。
         | 
| 90 103 |  | 
| 91 104 |  | 
| 92 105 | 
             
            ###試したこと、発生するエラー
         | 
| 93 106 |  | 
| 94 | 
            -
             | 
| 107 | 
            +
            しかしさらにboard.htmlを改造し、
         | 
| 95 108 |  | 
| 96 109 | 
             
            ```
         | 
| 110 | 
            +
             | 
| 97 | 
            -
            <p><a href="http://localhost:8000/polls/">現在 | 
| 111 | 
            +
            <p><a href="http://localhost:8000/polls/">現在投票中のアンケート一覧{% if question.is_date_limit %}{% for questions in question %}<li>{{ questions.question_text }}</li>{% endfor %}{% endif %}</a></p>
         | 
| 112 | 
            +
             | 
| 98 113 | 
             
            ```
         | 
| 99 114 |  | 
| 100 | 
            -
            と | 
| 115 | 
            +
            とすると今度は質問が表示されなくなってしまいます。
         | 
| 116 | 
            +
            おそらくpollsアプリケーションのmodels.py内にある
         | 
| 101 117 |  | 
| 102 118 | 
             
            ```
         | 
| 103 | 
            -
            'Question' object is not iterable
         | 
| 104 119 |  | 
| 120 | 
            +
            class Question(models.Model):
         | 
| 121 | 
            +
                question_text = models.CharField(max_length=200)
         | 
| 122 | 
            +
                pub_date = models.DateTimeField('date published')
         | 
| 123 | 
            +
                date_limit = models.DateTimeField('公開期限', default = timezone.now() + timedelta(days=7) )
         | 
| 124 | 
            +
             | 
| 125 | 
            +
             | 
| 126 | 
            +
                def is_date_limit(self):
         | 
| 127 | 
            +
                    # まだ公開期限を過ぎていないならTrue
         | 
| 128 | 
            +
                    now = timezone.now()
         | 
| 129 | 
            +
                    return now <= self.date_limit
         | 
| 130 | 
            +
             | 
| 131 | 
            +
             | 
| 105 132 | 
             
            ```
         | 
| 106 | 
            -
            とエラーが出てしまいました。
         | 
| 107 133 |  | 
| 134 | 
            +
            class Question(models.Model):内のdef is_date_limit(self):
         | 
| 135 | 
            +
            にアクセスできていないことが原因なのだと思います。
         | 
| 108 136 |  | 
| 109 137 |  | 
| 138 | 
            +
            boardアプリケーションからpollsアプリケーションのmodel.pyにあるclass Qusetionまでは呼び出せるのですがclass内関数まではimportできないようで、解決のため試行錯誤しております。
         | 
| 110 139 |  | 
| 140 | 
            +
            boardアプリケーションのviews.py
         | 
| 141 | 
            +
            ```
         | 
| 111 | 
            -
             | 
| 142 | 
            +
            import sys
         | 
| 143 | 
            +
            sys.path.append('../')
         | 
| 144 | 
            +
            from polls.models import Question ←ここまでは問題ない
         | 
| 112 | 
            -
             | 
| 145 | 
            +
            from polls.models import Question.is_date_limit ←ここがおそらく間違っている
         | 
| 113 146 |  | 
| 147 | 
            +
            ```
         | 
| 114 148 |  | 
| 149 | 
            +
            エラーメッセージはこのように表示されております
         | 
| 150 | 
            +
            ```
         | 
| 151 | 
            +
                from polls.models import is_date_limit
         | 
| 152 | 
            +
            ImportError: cannot import name 'is_date_limit' from 'polls.models'
         | 
| 115 153 |  | 
| 154 | 
            +
            ```
         | 
| 116 155 |  | 
| 156 | 
            +
            同アプリケーション内ならばis_date_limit関数は問題なく動作しているのですがそれを別のアプリケーションでも動作させるにはどうすればよいでしょうか?
         | 
| 157 | 
            +
            アドバイスをいただけると幸いです。
         | 
| 117 158 |  | 
| 159 | 
            +
             | 
| 118 160 | 
             
            ### 補足情報(FW/ツールのバージョンなど)
         | 
| 119 161 |  | 
| 120 162 | 
             
            python=3.7.0
         | 
