2013-07-05 5 views
0

Я создаю TemplateView с 2 формами, один из которых позволяет пользователю выбрать клиента (CustomerForm) и другой, чтобы добавить заказ (OrderForm) для клиента.Django - Нужна помощь для TemplateView: Queryset и не обновляется

Код:

class DisplayOrdersView(TemplateView): 
    template_name = 'orders/orders_details_form.html' 

    def get_context_data(self, **kwargs): 
     context = kwargs 
     context['shippingdetailsform'] = ShippingDetailsForm(prefix='shippingdetailsform') 
     context['ordersform'] = OrdersForm(prefix='ordersform') 
     return context 

    def dispatch(self, request, *args, **kwargs): 
     return super(DisplayOrdersView, self).dispatch(request, *args, **kwargs) 

    def get(self, request, *args, **kwargs): 
     context = self.get_context_data(**kwargs) 
     return self.render_to_response(context) 

    def post(self, request, *args, **kwargs): 
     context = self.get_context_data(**kwargs) 
     profile=request.user.get_profile() 
     if context['shippingdetailsform'].is_valid(): 
      instance = context['shippingdetailsform'].save(commit=False) 
      instance.profile = profile 
      instance.save() 
      messages.success(request, 'orders for {0} saved'.format(profile)) 
     elif context['ordersform'].is_valid(): 
      instance = ordersform.save(commit=False) 
      shippingdetails, created = shippingdetails.objects.get_or_create(profile=profile) 
      shippingdetails.save() 
      instance.user = customer 
      instance.save() 
      messages.success(request, 'orders details for {0} saved.'.format(profile)) 
     else: 
      messages.error(request, 'Error(s) saving form') 
     return self.render_to_response(context) 

Во-первых, я не могу показаться, чтобы загрузить все существующие данные в формы. Предполагая взаимосвязь onetoone между UserProfile-> ShippingDetails (fk: UserProfile) -> Orders (fk: ShippingDetails), как я могу запросить соответствующие переменные в форме при загрузке?

Также, как я могу сохранить данные? Он выдает ошибку при сохранении, и я не смог получить полезную информацию об отладке.

Является ли мой подход правильным при наличии нескольких форм в шаблоне?

ответ

2

Вы не передаете данные POST в формы в любой точке. Вам нужно сделать это, когда вы их создаете. Я переместил бы экземпляр из get_context_data и сделаю это в get и post: первый, как у вас сейчас, а второй - request.POST.

Также обратите внимание, что вы, вероятно, хотите проверить, что обе формы действительны до сохранения любого из них, а не проверки и сохранения по очереди. То, как вы это делаете сейчас, если первый из них действителен, он даже не проверяет второй, не говоря уже о его сохранении, поэтому вы не получите никаких ошибок в шаблоне, если первое верно, а второе неверно.

+0

Спасибо за помощь, подумайте, что я понимаю, как это работает сейчас. Я могу разрешить сохранение только одной формы вместо отправки одновременно, переосмыслить логику. Потребуется некоторое время, чтобы привыкнуть к тому, как работает django, сильно отличается от того, к чему я привык (настольные приложения). – mrkre

Смежные вопросы