Django: Отображение разных данных на странице в зависимости от даты?

Есть ли способ отображать на странице разные данные в зависимости от даты? Например, я создаю макротрекер и хочу показывать данные только за тот день, который ввел пользователь. Таким образом, их блюда, которые они добавили за 08-28-2021, будут отображаться на странице только за этот день.

Здесь представлена моя модель Meal.

class Meal(models.Model):
    name = models.CharField(
        max_length=1,
        choices=TYPES,
        default=TYPES[0][0]
    )
    date = models.DateField()
    foods = models.ManyToManyField(Food)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('meal_details', kwargs={'meal_id': self.id})

URL

path('meal/<int:meal_id>/', views.meal_details, name='meal_details')

и просмотр

@login_required
def meal_details(request, meal_id):
    meal = Meal.objects.get(id=meal_id)
    unadded_foods = Food.objects.exclude(id__in = meal.foods.all().values_list('id'))
    return render(request, 'meals/meal_details.html', {'meal': meal, 'foods': unadded_foods})

Предположим, что вы хотите вывести на шаблон питание на точный день, например: 2021-08-28

import datetime

def meals_list(request):
    # If a date is provided to the view then return
    # only meals for the given date, else show all meals
    year = int(request.GET.get('date_y', None))
    month = int(request.GET.get('date_m', None))
    day = int(request.GET.get('date_d', None))
    if not (date_y and date_m and date_d):
        # The date is not provided
        meals = Meals.objects.all()
    else:
        # The date is provided
        # Try to retrieve the date_year, date_month, and date_day
        # from the given date parameter and ensure you that it is clear
        # and correct. After it's just a simple filter operation
        
        meals = Meals.objects.filter(date__date=datetime.date(year, month, day)
    return render(request, 'meals/list.html', {'meals': meals, ...})

Я снова настаиваю на том, что вы несете ответственность за передачу действительного пользовательского объекта даты в ваше представление. Здесь я использовал запрос GET. Пример URL: /meals?date_y=2021&date_m=08&date_d=28. Но вы можете использовать POST запрос или другой способ передачи даты в представление

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