【问题标题】:How to render a POST and make it show up on another page? in Django form如何呈现 POST 并使其显示在另一个页面上?以 Django 形式
【发布时间】:2018-06-24 12:47:40
【问题描述】:

我正在尝试创建类似于 Hyrecar 的租车网站。我根据 Django 教程“使用表单”创建了一个表单,但我不知道如何呈现从 POST 表单中获得的信息。我想让我从 POST 获得的信息(预订名称、租金...等)显示汽车及其预订的详细信息。汽车是预订中的外键字段。我想将其重定向到显示已预订汽车的页面。 例如

  1. 预订名称:xyz
  2. 租金:123
  3. 汽车 : carimage.jpg 4 .

我想将它重定向到弹出页面。如果用户预订了汽车并发布了表格。之后将其重定向到 pop.html 页面并显示用户现在发布的预订详细信息。

Forms.py

class BookingForm(ModelForm):

 class Meta:
     model = Booking
     widgets = {
         'times_pick': forms.TimeInput(attrs={'class':'timepicker'}),

     }
     fields = ('booking_name','rental_price','book_car','customer_name','times_pick',)

urls.py

   [

   url(r'^booking/',views.BookingView.as_view(),name='car_booking'),

   url(r'^pop/$',views.PopView.as_view(),name='pop'),
 ]

views.py

  class CarDetailView(DetailView):
    context_object_name = 'car_details'
    model = models.Car
    template_name = 'buggy_app/car_detail.html'

class BookingView(FormView):
   template_name = 'buggy_app/booking.html'
   form_class = BookingForm
   models = Booking
   def form_valid(self, form):
       form.save()
        return super(BookingView, self).form_valid(form)

   success_url = reverse_lazy('index')

   def get_context_data(self, **kwargs):
       # kwargs['car'] is the car booking now!
        try:
           kwargs['car'] = Car.objects.get(id=self.request.GET.get('car', ''))
        except (Car.DoesNotExist, ValueError):
           kwargs['car'] = None

        return super(BookingView, self).get_context_data(**kwargs)

   def get_initial(self):
       initial = super(BookingView, self).get_initial()
       if 'car' in self.request.GET:
          try:
              initial['book_car'] = Car.objects.get(id=self.request.GET['car'])
           except (Car.DoesNotExist, ValueError):
            pass
       return initial

booking.html

    <form method="POST">
      {% csrf_token %}
      {% bootstrap_form form %}
      <input type="submit" class='btn btn-primary' value="Submit">

  </form>

【问题讨论】:

  • 所以你想在 class BookingView(FormView) 中使用发布的值
  • 我想显示用户预订的汽车。您可以说我想显示已预订的 car_details。获取该 id 数据并显示到 pop.html。您预订了 nissan 并且价格非常感谢您的预订
  • 您尝试过使用 AJAX 吗?
  • 没有。我不知道ajax
  • 如何使用ajax

标签: django django-forms django-templates


【解决方案1】:

这样试试

def save_form(request):
   args = {}
   form = BookCarForm(request.POST)
   if form.is_valid():
       book = form.save(commit=False)
       book.book_car_mark = request.POST.get('car_mark')
       book.book_car_mmodel = request.POST.get('car_model')
       book.book_car_year = request.POST.get('car_year')
       book.book_car_mark = request.POST.get('car_mark')
       form.save()
       try:
           args['book'] = Book.objects.get(id=book.id)
       except:
           args['book'] = None
       if args['book'] is not None:
           return render(request, 'your_template.html', args)
       else:
           return HttpResponseRedirect('/your/url/to-booking-form/')

字段名称作为模型和模板的名称是抽象的,所以它只是一个工作机制方案

【讨论】:

  • 看看我已经给出了更多我想要做什么的细节。
  • 我已经编辑了答案,试试新的。顺便说一句,开始构建自定义表单而不是基于模型的 django 表单。
猜你喜欢
  • 2012-10-20
  • 2023-03-05
  • 1970-01-01
  • 2021-11-06
  • 2011-07-17
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
相关资源
最近更新 更多