3

検索しても同様の質問が見つからなかったので、既出でしたら申し訳ありません。では、本題に入りましょう。@property 値 (そのうちの 3 つ) を持つモデルがあります。それらはすべて機能し、1 つが空になるだけで、問題が見つかりません。モデルの一部は次のとおりです。

@property
def case_number(self):
    '''
    An formatted number officially designating this case.
    '''
    s = u'%012d' % self.pk
    return s[:3] + '-' + s[3:6] + '-' + s[6:9] + '-' + s[9:]

@property
def case_id(self):
    '''
    An formatted string, consisting of the prefix NCDAC- and the case 
    number, officially designating this case.
    '''
    return 'NCDAC-' + self.case_number

@property
def due_date(self):
    margin = self.report_date + datetime.timedelta(days=30);
    if timeuntil(margin) <= datetime.timedelta(days=1):
        return 'today'
    elif timeuntil(margin) < 0:
        return 'overdue'
    else:
        return timeuntil(margin).split(', ')[0]

DB の結果を行で表示するテンプレート パーツは次のとおりです。

    {% for case in sent_cases %}
    <tr>
        <td>
            <a href="{% url "case-detail" case.pk %}">
                {{ case.case_number }}
            </a>
        </td>
        <td>{{ case.get_agency_display }}</td>
        <td>{{ case.report_date }}</td>
        <td>
            {% if case.status == "D" %}
            <i class="icon-minus-sign"></i> No
            {% else %}
            <i class="icon-ok-sign"></i> {{ case.ts_submitted|date:"d M Y" }}
            {% endif %}
        </td>
        <td>{{ case.due_date }}</td>
    </tr>
    {% endfor %}

{{ case.due_date }} 以外はすべて機能しています。ただの空きブロックです。なぜこれが起こっているのですか?

ありがとう。

更新:わかりました、「何か」を返そうとしましたが、機能しています。以下のエラーがあります-何らかの理由で例外が発生しません。self.report_dateとして定義されてreport_date = models.DateField(verbose_name='Report Date')おり、report_date + 30daysまでの残り日数を取得しようとしています。

4

1 に答える 1

1

以下の機能が動作するはずです。0 日未満も 1 日未満であるため、今日のチェックもこれらの日付で機能するため、期限切れのチェックを最初に移動しました。あなたが何日も欲しいと書いたので、私はtimeuntilの使用法も削除しました.

def due_date(self):
    margin = self.report_date + datetime.timedelta(days=30)
    time_left = margin - datetime.datetime.now()

    if time_left < datetime.timedelta(days=0, hours=0, minutes=0):
        return 'overdue'
    elif time_left <= datetime.timedelta(days=1):
        return 'today'
    else:
        return '%s days' % time_left.days
于 2012-11-24T21:34:43.550 に答える