django ifchanged значение перед изменением

#python #django #django-templates

#питон #джанго #django-шаблоны

Вопрос:

Я использовал ifcahnged как

 {% for day in doctor.scheduled_by.all %}
   {% ifchanged day.start_day_time %}
      <span> {{ day }} </span>
      <span>{{ day.start_day_time }} AM - {{ day.end_day_time }} PM</span>
   {% endifchanged %}
{% endfor %}
 

и в результате получается следующее

 Saturday
5:00:00 AM - 14:30:00 PM

Friday
0:09:00 AM - 0:02:00 PM
 

Я хочу что-то вроде

 Saturday - Thursday
5:00:00 AM - 14:30:00 PM

Friday - Saturday
0:09:00 AM - 0:02:00 PM
 

🙂 (новичок в сообществе).

Обновить

На самом деле это то, как мой models.py является

 class DaySchedulePattern(models.Model):
    week_day = models.ForeignKey(WeekDays, on_delete=models.CASCADE)
    time_slot_duration = models.DurationField()
    start_day_time = models.DurationField()
    end_day_time = models.DurationField()
    doctor = models.ForeignKey(
        "account.Doctor", on_delete=models.CASCADE,related_name="scheduled_by"
    )
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
    active = models.BooleanField(default=True)

 

Комментарии:

1. Можете ли вы поделиться своими моделями?

2. спасибо за повтор, просто обновил вопрос, и вот как выглядит моя модель.

Ответ №1:

Вы можете использовать встроенные фильтры django: date

предположим day , что в вашем шаблоне есть дата-время в вашем коде (которое не показано в вашей модели), сначала нужно добавить продолжительность.

 {% for day in doctor.scheduled_by.all %}
   {% ifchanged day.start_day_time %}
      <span> {{ day }} </span> - <span> {{ day|add:day.end_day_time|date:'l' }}
      <span>{{ day.start_day_time }} AM - {{ day.end_day_time }} PM</span>
   {% endifchanged %}
{% endfor %}
 

Ответ №2:

Возможно, у вас могло бы быть свойство end_day account.Doctor для конечного дня, возвращающее значение дня.

 @property
def end_day(self):
   days, hours, minutes = end_day_time.days, end_day_time.hours, end_day_time.minutes
   return day.start_day_time   datetime.timedelta(days=<days>, hours=<hours>).day



{% for day in doctor.scheduled_by.all %}
   {% ifchanged day.start_day_time %}
      <span> {{ day }} - {{day.end_day}}</span>
      <span>{{ day.start_day_time }} AM - {{ day.end_day_time }} PM</span>
   {% endifchanged %}
{% endfor %}