我正在制作一个“预订 airbnb”网站。
在我的公寓详细信息页面上,我有一个 JQuery UI Date Picker 日历,用户使用它来输入预订的开始日期和结束日期。
完成后,用户提交表单我想刷新整个网站,刷新时显示用户之前选择的日期,以及每天的价格和总价。
在我创建的模型中:
模型.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)
那么谁能帮我弄清楚将用户选择的日期与数据库中的价格日期进行比较并获得价格的最佳方法是什么?
非常感谢,现在卡在这个问题上一段时间了。