Я делаю веб-сайт "booking airbnb".
На моей странице сведений о квартире есть календарь выбора даты в JQuery UI, который пользователь использует для ввода дат начала и окончания. о бронировании.
Как только это будет сделано, и пользователь отправит форму, я хочу обновить весь сайт, а при обновлении отобразить даты, которые пользователь выбрал ранее, с указанием цены за день и общей цены.
В моих моделях я создал:
models.py:
class Apartment(models.Model):
title = models.CharField(max_length=200)
address = models.CharField(max_length=200)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
zipcode = models.CharField(max_length=20)
description = models.TextField(blank=True)
apartment_price = models.IntegerField()
bedrooms = models.IntegerField()
bathrooms = models.DecimalField(max_digits=2, decimal_places=1)
garage = models.IntegerField(default=0)
size = models.IntegerField()
photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/')
list_date = models.DateTimeField(default=datetime.now, blank=True)
def __str__(self):
return self.title
class ApartmentImages(models.Model):
apartment = models.ForeignKey(Apartment, on_delete="models.CASCADE", related_name="image")
image = models.ImageField("image")
def __str__(self):
return self.image.url
class ApartmentPrices(models.Model):
apartment = models.ForeignKey(Apartment, on_delete="models.CASCADE", related_name="price")
price_start_date = models.DateField(blank=True, null=True)
price_end_date = models.DateField(blank=True, null=True)
price = models.IntegerField()
def __str__(self):
return self.apartment.title
class Reservation(models.Model):
apartment = models.ForeignKey(Apartment, related_name='reservations',
on_delete=models.CASCADE, blank=True, null=True)
start_date = models.DateField(blank=True, null=True)
end_date = models.DateField(blank=True, null=True)
name = models.CharField(default="", max_length=200)
def __str__(self):
return self.name
Это то, что я имею до сих пор. Я пробовал много разных вещей, но я застрял в логике того, как это должно работать.
вот мое мнение:
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
prices = ApartmentPrices.objects.filter(apartment__pk=apartment_id)
context = {}
context['apartment'] = apartment
context['prices'] = prices
# svi datumi za cijene
price_dates = []
for start, end, price in prices.values_list('price_start_date', 'price_end_date', 'price'):
while start <= end:
price_dates.append(start.strftime('%-d-%m-%Y'))
price_dates.append(price)
start += datetime.timedelta(days=1)
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()
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
return render(request, "booking/apartment.html", context)
return render(request, 'booking/apartment.html', context)
Так что кто-нибудь может помочь мне разобратьсяКаков наилучший способ сравнить выбранные пользователем даты с датами цен в БД и получить цену?
Спасибо большое, сейчас застряли на этом.