2017-01-02 30 views
1

私はprogressBarの自動投稿しようとしていますが、そのイベントのend_datebeggining_dateがあり、20%完了のようなイベントの完了率が表示されますまたは40%が日付と日付との差分とプログレスバーの比率

など、完全に私は私のコードで私に複数のエラーがあるかもしれないと思うが、現在私が取得しています AttributeError 'QuerySet' object has no attribute 'time_progress' 【選択のアイデアは time_progress()を呼び出すために、それが完了率を返しますです。

マイコード:

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> 
+0

'Event.objects.filter'はインスタンスではなくクエリーセットを返します。あなたが 'DetailView'を使用しているので、self.get_object()はオブジェクトを取得するのに適しています。それ以外の場合は、代わりに 'get_object_or_404'または' Event.objects.get() 'を使うことができます – Marat

答えて

0

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()

+0

ありがとう、本当に助かりました。また、progress =((now - self.beginning_date)/(self.end_date - self.beginning_date))* 100'に進捗を固定し、 'return int(progress)'を追加しました。 –

関連する問題