bux
bux

Reputation: 7739

Prevent model saving before formset validation

How can i prevent model saving before formset validation ? Code exemple:

form = StockMovementForm(data=data)
Formset = inlineformset_factory(StockMovement, StockMovement.products.through, extra=2, can_delete=False)
if form.is_valid():
  stock_movement = form.save()
  formset = Formset(data=data, instance=stock_movement)
  if formset.is_valid():
    formset.save()

(StockMovementForm is used to create a new *stock_movement*)

I would like save form after check validity of formset.

I found something like:

form = StockMovementForm(data=data)
Formset = inlineformset_factory(StockMovement, StockMovement.products.through, extra=2, can_delete=False)
formset = Formset(data=data)
if form.is_valid():
  if formset.is_valid():
    stock_movement = form.save()
    objects = formset.save(commit=False)
    for object in objects:
      object.movement = stock_movement
      object.save()

But i don't know if it's a good way (found here).

Upvotes: 2

Views: 870

Answers (1)

Brandon Taylor
Brandon Taylor

Reputation: 34553

I would check for validity of the form and the formsets as such:

form = StockMovementForm(data=data)
Formset = inlineformset_factory(StockMovement,
    StockMovement.products.through, extra=2, can_delete=False)
formset = Formset(data=data)
if form.is_valid() and formset.is_valid():
    stock_movement = form.save()
    objects = formset.save(commit=False)
    for object in objects:
      object.movement = stock_movement
      object.save()

Upvotes: 4

Related Questions