python/django 日期之间的差异,以及进度条的比率

python/django difference between dates, and ratio for progress bar

我正在尝试制作一个自动 progressBar,它采用事件的 end_datebeggining_date 并为您提供事件的完成比率,例如 20 % 完成或 40% 完成等

我认为我的代码中可能存在多个错误,但目前我收到 AttributeError 'QuerySet' object has no attribute 'time_progress' .思路是调用time_progress(),完成率会return。

我的代码:

models.py

class Event(models.Model):
    # other Fields above
    beginning_date = models.DateTimeField("Beggining date")
    end_date = models.DateField("Completion date")

    def time_progress(self):
        now = timezone.now()
        progress = ((now - self.beginning_date).days/((self.end_date - now).days + (now - self.beginning_date).days))*100
        return progress

views.py

class EventView(generic.DetailView):
    model = Event

    template_name = 'info/event.html'

    def get_context_data(self, **kwargs):
        context = super(EventView, self).get_context_data(**kwargs)
        context['progress'] = Event.objects.filter(pk=self.kwargs.get('pk')).time_progress()
        return context

event.html

<div class="progress">
    <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar"
                aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ progress }}%">{{ progress }}%</div>
</div>

DetailView 已经在其上下文中包含一个 {{ object }}。您不需要自定义 get_context_data 方法,而是在您的模板中使用:

... style="width:{{ object.time_progress }}%" ...

如果您确实想在模板中创建 progress,请考虑使用 {% with progress=object.time_progress %}...{% endwith %} 或修复您的 get_context_data:

context['progress'] = self.object.time_progress()

您可能还想将值向下舍入(可能使用 int()