Python Django-发送表单数据视图并返回模板
我试图从我的表单中捕获数据并将其发送到我的视图,以便在那里执行一些业务逻辑 我有一个“预订”网站项目,我希望用户选择开始和结束日期(我的模板中有一个jquery日期选择器),然后在表单上提交并发送到我的视图(和数据库)。然后,我的视图将日期与数据库中存储的价格进行比较,以便知道每天的价格,在表单提交后重定向时,数据将显示在网站上 希望这是有道理的 以下是我的看法:Python Django-发送表单数据视图并返回模板,python,django,django-forms,Python,Django,Django Forms,我试图从我的表单中捕获数据并将其发送到我的视图,以便在那里执行一些业务逻辑 我有一个“预订”网站项目,我希望用户选择开始和结束日期(我的模板中有一个jquery日期选择器),然后在表单上提交并发送到我的视图(和数据库)。然后,我的视图将日期与数据库中存储的价格进行比较,以便知道每天的价格,在表单提交后重定向时,数据将显示在网站上 希望这是有道理的 以下是我的看法: def公寓视图(请求、公寓id): reservation=reservation.objects.filter(公寓\uuuu p
def公寓视图(请求、公寓id):
reservation=reservation.objects.filter(公寓\uuuu pk=公寓\u id)
公寓=获取对象或404(公寓,主键=公寓id)
不可用=[]
对于开始,在公寓中结束。预订。值列表(“开始日期”,“结束日期”):
而start根据提供的评论,我想我已经理解了这个问题。您希望将价格也传递到HTML页面上
必须将全局变量定义为start\u date\u price
和end\u date\u price
和context
def apartment_view(request, apartment_id):
context = {}
start_date_price = 0
end_date_price = 0
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():
start_date = form.cleaned_data.get('start_date')
end_date = form.cleaned_data.get('end_date')
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
# your logic here
start_date_price = start_date * your_logic
end_date_price = end_date * your_logic
context['start_date_price'] = start_date_price
context['end_date_price'] = end_date_price
# I would suggest remove this line and check, when the form renders, it would display all the values there itself
#return HttpResponseRedirect(reverse('booking:apartment', kwargs={'apartment_id': apartment.pk}))
context['form'] = form
context['apartment'] = apartment
context['unavailable_dates'] = json.dumps(unavailable)
def公寓视图(请求、公寓id):
上下文={}
开始日期价格=0
结束日期价格=0
reservation=reservation.objects.filter(公寓\uuuu pk=公寓\u id)
公寓=获取对象或404(公寓,主键=公寓id)
不可用=[]
对于开始,在公寓中结束。预订。值列表(“开始日期”,“结束日期”):
虽然代码中的start everything似乎都是正确的,但您面临的问题是什么?当用户提交表单时,如何将“start_date”和“end_date”值获取到模板中,我希望在重定向时显示它们。希望我没有把你搞糊涂哈哈!好的,我们通常在提交表单之前显示日期,所以您提到了JQuery日期选择器,它不会在HTML页面上显示日期?JQuery选择器会显示日期,用户用它选择日期。但在用户选择日期后,我想计算总价格(每个日期都有自己的价格),并将它们重定向回同一页面,这次也显示价格。发布后,您将重定向到预订:公寓这和这是相同的视图吗?非常感谢您的努力!不幸的是,我没能解释清楚,对不起,英语不是我的母语。我添加了我的模型,希望能让它更清晰。所以我的最终目标是:显示公寓详细信息页面,用户选择日期,重定向到同一页面,只是这次我需要显示每天的价格,以及这些天的总价格。我计划从表格中获取日期,然后将其与公寓价格中的日期进行比较,并以某种方式筛选出正确的价格。到目前为止,这是一场战斗。
def apartment_view(request, apartment_id):
context = {}
start_date_price = 0
end_date_price = 0
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():
start_date = form.cleaned_data.get('start_date')
end_date = form.cleaned_data.get('end_date')
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
# your logic here
start_date_price = start_date * your_logic
end_date_price = end_date * your_logic
context['start_date_price'] = start_date_price
context['end_date_price'] = end_date_price
# I would suggest remove this line and check, when the form renders, it would display all the values there itself
#return HttpResponseRedirect(reverse('booking:apartment', kwargs={'apartment_id': apartment.pk}))
context['form'] = form
context['apartment'] = apartment
context['unavailable_dates'] = json.dumps(unavailable)
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="form-btn save btn btn-default">Send</button>
</form>
{{start_date_price}}
{{end_date_price}}