J'ai la vue sur la base de classe suivante que je veux utiliser pour rendre un formset et valider quand il est soumis par une méthode post:django rendre et valider formset en classe vue sur la base (ListView)
formset rend parfaitement. Lorsque je soumets le formulaire je peux lire le formset et le vérifier pour les erreurs. dans la méthode post de cette classe ->errors = backorder_formset.errors
Si je trouve des erreurs dans le formset, je voudrais rendre la vue, mais cette fois avec l'instance formset, que j'ai lue depuis POST. Quand j'appelle forme ctx = self.get_context_data()
dans la méthode post de la classe l'erreur suivante est soulevée de l'appel super(MissingProductsListView, self).get_context_data(*args, **kwargs)
: 'MissingProductsListView' object has no attribute 'object_list'
Il semble que la superclasse de Listview effectue cet appel: queryset = kwargs.pop('object_list', self.object_list)
Ma question est pourquoi je cours dans cette erreur? et comment est-ce que je pourrais rendre ce formset avec ses messages d'erreurs pour l'afficher dans le modèle après qu'il ait été posté? J'utilise 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
avez-vous essayé d'utiliser 'try ... except'Je pense que vous pouvez le faire si vous avez un modèle de rendu d'erreur avec des captures de massage d'erreur par exception? –