错误传递字段给视图,我如何正确地传递模型字段给视图?



我试图将模型字段传递给视图以计算时间之和,但我得到一个错误:无法将关键字'hours_worked'解析为字段。选项有:car, car_id, date, deal_gts, deal_me, driver, driver_id, finish_work, gain, id, start_work

models.py

class Trip(models.Model):
date = models.DateField(auto_now=False, verbose_name='Дата')
car = models.ForeignKey(Cars, on_delete=models.CASCADE, verbose_name='Автомобиль')
driver = models.ForeignKey(Driver, on_delete=models.CASCADE, verbose_name='Водитель')
start_work = models.TimeField(verbose_name='Начало работы')
finish_work = models.TimeField(verbose_name='Окончание работы')
hours_worked = models.CharField(max_length=20, blank=True, verbose_name='Отработано часов')
deal_me = models.IntegerField(verbose_name='Сделки МЭ', blank=True, default=0)
deal_gts = models.IntegerField(verbose_name='Сделки ГТС', blank=True, default=0)
gain = models.IntegerField(verbose_name='Выручка')
class Meta:
verbose_name = 'Доставка'
verbose_name_plural = 'Достваки'
def hours_worked(self):
fw = self.finish_work
sw = self.start_work
hw = datetime.combine(date.today(), fw) - datetime.combine(date.today(), sw)
hours_worked = str(hw).rsplit(':', 1)[0]
return hours_worked

wiews.py

from django.shortcuts import render, redirect
from .forms import TripForm
from .models import Trip


def home_view(request):
trip = Trip.objects.all()


# сумма чвасов
sum_hour = 0
me = Trip.objects.values_list('hours_worked')
# print(me)
for el in me:
for i in el:
sum_hour = int(sum_hour) + int(i)

context = {
'sum_hour': sum_hour
}

return render(request, 'driver_productivity/home.html', context) 

告诉我我的思考方向是否正确,还是在模型中不进行计算更好?

如果您使用可以访问的属性,请尝试此方法。

@property
def hours_worked(self):
fw = self.finish_work
sw = self.start_work
hw = datetime.combine(date.today(), fw) - datetime.combine(date.today(), sw)
hours_worked = str(hw).rsplit(':', 1)[0]
return hours_worked

在视图

from django.shortcuts import render, redirect
from .forms import TripForm
from .models import Trip
def home_view(request):
trip = Trip.objects.all()


# сумма чвасов
sum_hour = 0
k = Trip.objects.all()
me = k.hours_worked
# print(me)
for el in me:
for i in el:
sum_hour = int(sum_hour) + int(i)

context = {
'sum_hour': sum_hour
}

return render(request, 'driver_productivity/home.html', context) 

最新更新