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 запрос или другой способ передачи даты в представление