Изменение цвета поля в таблице в зависимости от того, сколько времени осталось пользователю до оплаты с помощью 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.

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