Изменение цвета поля в таблице в зависимости от того, сколько времени осталось пользователю до оплаты с помощью Django
Я пытаюсь изменить цвет поля в таблице в зависимости от того, сколько времени осталось пользователю до оплаты, если до оплаты осталось 7 дней, оно должно измениться на желтый, а если уже наступила дата оплаты или уже нужно было оплатить, оно должно измениться на красный, тот, который меняется на красный я понял, но я не могу заставить его измениться на желтый, когда осталось 7 дней до оплаты.
Это моя модель и def
class payments (models.Model):
client = models.OneToOneField(HealthQuests, on_delete=models.CASCADE, null=True, blank=True, verbose_name= 'Cliente')
date = models.DateField(default=datetime.date.today, verbose_name= 'Fecha de facturación')
payment_date = models.DateField(default=datetime.date.today, verbose_name= 'Fecha de pago')
amount = models.FloatField(verbose_name='Monto de pago', default=0)
def payment_yellow (self):
return date.today() - payments.payment_date
def payment_red (self):
return date.today()
А мой html и if
<tbody>
{% for obj in object_list %}
<tr>
<td><a href="update_payments/{{ obj.id }}" class="btn">{{ obj.client }}</a></td>
<td>{{ obj.date }}</td>
<td>
{% if obj.payment_date <= obj.payment_red %}
<div class="p-3 mb-2 bg-danger text-white">{{ obj.payment_date }}</div>
{% elif obj.payment_yellow >= 7 %}
<div class="p-3 mb-2 bg-warning text-white">{{ obj.payment_date }}</div>
{% else %}
{{ obj.payment_date }}
{% endif %}
</td>
<td>{{ obj.amount }}</td>
</tr>
{% endfor %}
</tbody>
Потому что вы жестко закодировали проверку условия на 7
в шаблоне, функция возвращает timedelta
между текущей датой и датой платежа.
Также, это должно быть self.payment_date
, а не payments.payment_date
.
В настоящее время вы должны извлечь дни, чтобы ваш код работал в методе payment_yellow()
так:
def payment_yellow(self):
return (self.payment_date - date.today()).days
Примечание: Модели Django обычно пишутся на
PascalCase
и не требуют добавленияs
в качестве суффикса, так как он добавлен по умолчанию, поэтому лучше называть ихPayment
, а не.payments