【发布时间】:2023-03-07 05:15:01
【问题描述】:
我正在制作一个“预订 airbnb”网站。
在我的公寓详细信息页面上,我有一个 JQuery UI Date Picker 日历,用户使用它来输入预订的开始日期和结束日期。
一旦完成并且用户提交了我想刷新整个网站的表单,刷新时会显示用户之前选择的日期,以及每天的价格和总价。
在我创建的模型中:
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)
那么谁能帮我弄清楚将用户选择的日期与数据库中的价格日期进行比较并获得价格的最佳方法是什么?
非常感谢,已经卡了一段时间了。
【问题讨论】:
-
你真的要刷新还是之前不了解 AJAX?
-
嗨蒂亚戈,感谢您的回答。我真的需要刷新,我不应该使用 JS/AJAX。这一切都必须在后端完成。
标签: python django model business-logic