Python Django - неподдерживаемый тип(ы) операнда для -: 'float' и 'NoneType'

Я новичок в python и Django, я пытался искать, но не могу найти ответ на этот вопрос. Может ли кто-нибудь помочь мне с этим, пожалуйста.

Код из моего html:

<td class="px-2 py-1 align-middle text-center">
{{ schedule.count_available|floatformat:0|intcomma }}
</td>

моя модель:

class Schedule(models.Model):
    code = models.CharField(max_length=100)
    vessel = models.ForeignKey(Vessel,on_delete=models.CASCADE)
    depart = models.ForeignKey(Location,on_delete=models.CASCADE, related_name='depart_location')
    destination = models.ForeignKey(Location,on_delete=models.CASCADE, related_name='destination')
    schedule= models.DateTimeField()
    fare= models.FloatField()
    status = models.CharField(max_length=2, choices=(('1','Active'),('2','Cancelled')), default=1)
    date_created = models.DateTimeField(default=timezone.now)
    date_updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.code + ' - ' + self.vessel.vessel_number)

    def count_available(self):
        booked = Booking.objects.filter(schedule=self).aggregate(Sum('seats'))['seats__sum']
        return self.vessel.seats - booked

ошибка: ошибка изображения

Ошибка появляется, когда значение booked равно None. Вам следует отладить свой код.

Имеет ли ваш запрос Booking.objects.filter(schedule=self) хотя бы одно значение

Ошибка возникает, когда django встречает объект расписания, у которого нет бронирования, и в таком случае

booked = Booking.objects.filter(schedule=self).aggregate(Sum('seats'))['seats__sum']

оценивается в None и вызывает ошибку

Чтобы решить эту проблему, обновите метод count_available следующим образом

def count_available(self):
    booked = Booking.objects.filter(schedule=self).aggregate(Sum('seats'))['seats__sum']
    if booked:
        return self.vessel.seat - booked
    return self.vessel.seats

Это будет выполнять вычитание только в том случае, если бронирование для данного расписания доступно, в противном случае возвращается общее количество мест для расписания

Вернуться на верх