3

我搜索但找不到类似的问题,所以如果已经回答,我很抱歉。现在让我们进入主题。我有一个带有 @property 值的模型(其中 3 个)。所有这些都有效,一个只是返回空,我找不到问题。这是模型的一部分:

@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]

这是以行显示数据库结果的模板部分:

    {% 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 回答