2017-01-14 3 views
1

Мне нужно сохранить новую запись из экземпляра exitsing встроенного набора форм. Мне удалось сохранить новый экземпляр из родительской модели (Order), но я не могу понять, как сохранить новый экземпляр набора форм. Код выглядит так:Сохраните новую запись из экземпляра формы

def order(request, date): 
    edit = Order.objects.get(date=date, user=None) 
    edit_formset = modelformset_factory(Order_items, fields='__all__', extra=0) 
    if request.method == 'POST': 
     form = OrderForm(request.POST, instance=edit) 
     formset = edit_formset(request.POST, queryset=Order_items.objects.filter(order__date=date)) 
     if form.is_valid(): 
      instance = form.save(commit=False) 
      instance.pk = None 
      instance.user_id = request.user.id 
      if formset.is_valid(): 
       form.save() 
       formset.save() 
      return HttpResponseRedirect('order') 
    else: 
     form = OrderForm(instance=edit) 
     formset = edit_formset(queryset=Order_items.objects.filter(order__date=date)) 
     return render(request, 'diner/order.html', {'edit': edit, 'form': form, 'formset': formset}) 
+0

Не уверен, что вы имеете в виду о «новом экземпляре formset», так как точка formset является то, что она содержит множество форм. Но что не так с кодом, который вы поставили? Что он делает, чего вы не ожидаете, или не делаете того, что ожидаете? Какие ошибки вы получаете? –

+0

Мне нужно отредактировать существующую запись и сохранить новую. Проблема в том, что код сохраняет новую запись таблицы Order, но не создает новую в Order_items. – ZmuA

+0

Предположительно 'formet_is_valid()' False, но вы все же перенаправляете в этом случае. –

ответ

0

Хорошо, я пришел к решению:

if form.is_valid(): 
    form.cleaned_data['pk'] = None 
    if formset.is_valid(): 
      create_order = Order.objects.create(date=form.cleaned_data['date'], user_id=request.user.id) 
      new = formset.save(commit=False) 
      for n in new: 
       n.id = None 
       n.order_id = create_order.id 
       create_order.save() 
       n.save() 
0

Вы можете попробовать это.

if request.method == 'POST': 
    form = OrderForm(request.POST, instance=edit) 
    formset = edit_formset(request.POST) 
    If form.is_valid(): 
     instance = form.save(commit=False) 
     instance.pk = None 
     instance.user_id = request.user.id 
     form.save() 
     if formset.is_valid(): 
      add_new = formset.save(commit=False) 
      add_new.instance = instance 
      add_new.save() 
      return HttpResponseRedirect('order') 

Поскольку в то время как после запроса вы определяете экземпляр в formset = edit_formset (request.POST, например = редактировать) так при сохранении formset это сохранить Order_Item для старого порядка, который вы называете, как «редактировать 'не новый новый. И add_new.instance = экземпляр поможет создать новый экземпляр formet.

+0

Не это. У Formset нет атрибута «instance», поэтому он не будет «делать». – ZmuA

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