Я создаю сайт airbnb как проект, и я создал этого монстра (да, я знаю):
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
context = {}
context['apartment'] = apartment
unavailable = []
for start, end in apartment.reservations.values_list('start_date', 'end_date'):
while start <= end:
unavailable.append(start.strftime('%-d-%m-%Y'))
start += datetime.timedelta(days=1)
form = ReservationForm()
context['unavailable_dates'] = json.dumps(unavailable)
context['form'] = form
if request.method == 'GET':
form = ReservationForm()
if request.method == "GET":
form = ReservationForm(request.GET)
if form.is_valid():
context = {}
reservation = form.save(commit=False)
reservation.apartment = apartment
start_date = request.GET.get('start_date', None)
end_date = request.GET.get('end_date', None)
sdate = datetime.datetime.strptime(start_date, '%Y-%m-%d') #start
edate = datetime.datetime.strptime(end_date ,'%Y-%m-%d') #end
prices_by_date = apartment.price_by_date(sdate, edate)
user_dates = [sdate + datetime.timedelta(days=x) for x in range((edate-sdate).days + 1)]
user_date_list = []
for day in user_dates:
user_date_list.append(day.strftime('%d,%m,%Y'))
context['price_per_day'] = prices_by_date.price
context['total_price'] = len(user_date_list) * prices_by_date.price
context['unavailable_dates'] = json.dumps(unavailable)
context['form'] = form
context['apartment'] = apartment
context['date_start'] = start_date
context['date_end'] = end_date
form.save()
return render(request, "booking/apartment.html", context)
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
HttpResponseRedirect(reverse('booking:apartment', kwargs={"apartment_id": apartment.pk}))
return render(request, 'booking/apartment.html', context)
Чтобы описать, что происходит, пользователь сначала заходит на сайт и выбираетдата начала и окончания бронирования квартиры. Они нажимают кнопку, чтобы рассчитать общую стоимость бронирования, страница обновляется и отображает цены. Затем они нажимают кнопку «подтвердить бронирование», которая отправляет запрос на бронирование с резервированием, страница обновляется еще раз, и теперь отображается текст «Спасибо за бронирование».
Есть ли способ, которым яможет улучшить эту точку зрения? Я сделал все, что мог, я все еще учусь джанго. Возможно, мне следует изменить его на представление на основе классов, но не знаю, как это сделать, это довольно запутанно.
Я был бы очень признателен за помощь в этом, большое спасибо!