【发布时间】:2017-04-06 02:37:01
【问题描述】:
我有以下基于类的视图,我想用它来呈现一个表单集并在它通过 post 方法提交时对其进行验证:
表单集完美呈现。当我提交表单时,我可以阅读表单集并检查它是否有错误。在这个类的post方法中->errors = backorder_formset.errors
如果我在 formset 中发现任何错误,我想渲染视图,但这次使用我从 POST 读取的 formset 实例。
当我在类的 post 方法中调用ctx = self.get_context_data() 表单时,调用super(MissingProductsListView, self).get_context_data(*args, **kwargs) 会引发以下错误:
'MissingProductsListView' object has no attribute 'object_list'
似乎 Listview 的超类执行了这个调用:queryset = kwargs.pop('object_list', self.object_list)
我的问题是为什么我会出现这个错误?以及如何在发布后呈现此表单集及其错误消息以将其显示在模板中?我正在使用 Django 1.9.9
class MissingProductsListView(generic.ListView):
template_name = 'dashboard/purchaseorder/missing_products.html'
context_object_name = 'backorders'
model = BackOrder
def post(self, request, *args, **kwargs):
backorder_formset = BackOrderFormset(request.POST)
errors = backorder_formset.errors
if backorder_formset.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/success/')
else:
ctx = self.get_context_data()
return self.render_to_response(ctx)
def accumulate_identical_products_from_backorders(self, back_order_list):
... some code
return sorted_accumulated_dict.values()
def get_context_data(self, *args, **kwargs):
ctx = super(MissingProductsListView, self).get_context_data(*args, **kwargs)
ctx['title'] = _("Missing Products")
if self.request.POST:
ctx['back_order_formset'] = BackOrderFormset(self.request.POST)
else:
accumulated_backorders_per_product = self.accumulate_identical_products_from_backorders(BackOrder.objects.all())
back_orders = BackOrderFormset(initial=[{'product_id': backorder_dict['product_id'],
'product': backorder_dict['title'],
'quantity': backorder_dict['quantity']} for backorder_dict in
accumulated_backorders_per_product])
ctx['back_order_formset'] = back_orders
return ctx
def get_queryset(self):
.. some code
return backorder_list
【问题讨论】:
-
您是否尝试过使用
try...except我认为如果您的错误渲染模板带有异常捕获的错误消息,您可以做到吗?
标签: python django django-forms django-class-based-views