Как показать в шаблонах, если запланированное окончание проекта отложено на основании даты окончания в django?
Я вроде как застрял с логикой, где если проект, который просрочен и его значение прогресса все еще не 100% завершения, он должен показать отложенный текст. Я передал завершенный и текущий тексты, просто передав значение projects.project_progress в == и < 100 с уважением.
Models.py
class Projects(models.Model):
id=models.AutoField(primary_key=True)
project_name=models.CharField(max_length=255)
project_manager=models.ForeignKey(CustomUser,on_delete=models.CASCADE, limit_choices_to={'is_project_manager' : True})
client_name=models.ForeignKey(Clients,on_delete=models.CASCADE, null=True)
project_pic=models.ImageField(upload_to='static/website/project-images')
project_start_date=models.DateField(null=True)
project_end_date=models.DateField(null=True)
project_description=models.TextField(null=True)
project_progress = models.PositiveIntegerField(null=True, default=0,
validators=[
MaxValueValidator(100),
MinValueValidator(0)
])
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
is_draft = models.BooleanField(default=True)
objects=models.Manager()
class Meta:
verbose_name_plural = 'Project'
def __str__(self):
return f'{self.project_name}'
Views.py
@login_required(login_url='user-login')
def project_details(request, pk):
projects = Projects.objects.get(id=pk)
employed = Employee.objects.filter(project_site=projects)
invents = Project_Inventory.objects.filter(project_site=projects)
context = {
'projects' : projects,
'employed' : employed,
'invents' : invents,
}
template_name ='project-admin/project-details.html'
return render(request, template_name, context)
Шаблон "Детали проекта"
Я адаптировал код из этого ответа для вашей ситуации. Вы можете заменить оператор if из шаблона на следующий:
{% now "Y-m-d" as todays_date %}
<td>
{% if projects.project_progress == 100 %}
<p>Completed</p>
{% elif projects.project_progress < 100 && todays_date < project_end_date|date:"Y-m-d" %}
<p>Ongoing</p>
{% elif projects.project_progress < 100 && todays_date > project_end_date|date:"Y-m-d" %}
<p>Delayed</p>
{% endif %}
</td>
В качестве альтернативы вы можете добавить контекстную переменную в ваше представление и передать булеву переменную, как описано в этом ответе