Я пытаюсь получить данные из моей формы и отправить их на мой взгляд, чтобы я мог выполнять некоторую бизнес-логику там.
У меня есть проект веб-сайта «бронирования», я хочу, чтобы пользователь выбрал началои даты окончания (у меня есть шаблон выбора даты jquery в моем шаблоне), и при отправке формы отправьте его на мой взгляд (и БД). Затем мое представление сравнивает даты с ценами, хранящимися в базе данных, чтобы узнать цену за каждый день, и при перенаправлении после отправки формы данные отображаются на веб-сайте.
Надеюсь, что это имеет смысл.
Вот мой взгляд:
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
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()
if request.method == 'GET':
form = ReservationForm()
date = request.GET.get('reservation.start_date')
print(date)
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 HttpResponseRedirect(reverse('booking:apartment', kwargs={'apartment_id': apartment.pk}))
context = {}
context['form'] = form
context['apartment'] = apartment
context['unavailable_dates'] = json.dumps(unavailable)
моя форма:
class ReservationForm(forms.ModelForm):
class Meta:
model = Reservation
fields = [
'start_date',
'end_date',
'name',
]
widgets = {
'start_date': TextInput(attrs={'id': 'datepicker'}),
'end_date': TextInput(attrs={'id': 'datepicker2'}),
}
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="form-btn save btn btn-default">Send</button>
</form>
Может кто-нибудь помочь мне понять, как я могу сделать это самостоятельно? Спасибо.
Я не могу использовать JS для этого.
edit: models:
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