2014-12-17 2 views
0

저는 Modelform 및 inlineforset_factory를 사용하여 송장 및 항목을 생성했습니다. 편집 폼을 만들려고하는데 인라인 필드를 편집하려고 할 때 MultiValueDictKeyError가 발생합니다. 새로운 인라인 형식을 만들면 Modelform을 편집 할 수 있습니다. 1 시간 씩 인터넷 검색을 한 후에는 어떤 해결책도 찾을 수 없습니다.상위 양식과 연관된 인라인 형식 집합 편집

maxItems = 20 
ItemFormSet = inlineformset_factory(Invoice, Item, can_delete=True, extra=maxItems) 

새 송장 만들기 당신은 내가 다른 인스턴스 가정 두 변수, invoicerinvoice

def new_invoice(request): 
if request.method == "POST": 
    form = InvoiceForm(request.POST) 
    if form.is_valid(): 
     invoice = form.save(commit=False) 
     item_formset = ItemFormSet(request.POST,instance=invoice) 
     if item_formset.is_valid(): 
      invoice.dateCreated = datetime.datetime.now() 
      invoice.save() 
      item_formset.save() 
      return redirect('list/new0') 
else: 
    form = InvoiceForm() 
    item_formset = ItemFormSet(instance=Invoice()) 
return render(request, "form.html", {"form": form, "item_formset": item_formset }) 

편집 송장 (MultiValueDictKeyError)

def edit_invoice(request, invoice_id): 
invoicer = get_object_or_404(Invoice, pk=invoice_id) 
if request.method == "POST": 
    form = InvoiceForm(request.POST, instance=invoicer) 
    if form.is_valid(): 
     invoice = form.save(commit=False) 
     item_formset = ItemFormSet(request.POST,instance=invoice) 
     if item_formset.is_valid(): 
      invoice.dateCreated = datetime.datetime.now() 
      invoice.save() 
      item_formset.save() 
      return redirect('list/new0') 
else: 
    form = InvoiceForm(instance=invoicer) 
    item_formset = ItemFormSet(instance=invoicer) 
return render(request, "form.html", {"form": form, "item_formset": item_formset }) 

답변

0

그래, 문제는 views.py 나 forms.py가 아니라 템플릿에서 발견되었습니다. 왜냐하면 {{form.as_p/table/...}}을 사용하지 않고 템플릿을 만들었 기 때문에 양식에 DELETE, ID 및 foreignKey 등의 추가 입력이 있습니다 ... for for 루프에 추가 한 후 모든 것이 잘 작동합니다 :)

0

(완벽하게 작동) 같은 대상. 수정보기를 다음과 같이 다시 작성하십시오.

def edit_invoice(request, invoice_id): 
    invoice = get_object_or_404(Invoice, pk=invoice_id) 
    if request.method == 'POST': 
     form = InvoiceForm(request.POST, instance=invoice) 
     formset = ItemFormSet(request.POST, instance=invoice) 
     if form.is_valid() and formset.is_valid(): 
      invoice = form.save() 
      invoice.dateCreated = datetime.datetime.now() 
      invoice.save() 
      formset.save() 
      return redirect('list/new0') 
    else: 
     form = InvoiceForm(instance=invoice) 
     formset = ItemFormSet(instance=invoice) 
    context = { 
     'form': form, 
     'formset': formset, 
    } 
    return render(request, 'form.html', context) 

저의 도움이되는지 알려주세요.

+0

슬프게도, 그것을 제출하려고 할 때 슬프게도 나에게 무슨 일이 일어나는가. MultiValueDictKeyError with "u'item_set-0-id '".. 나는 어떤 이유로 그것들이 편집되지 않고 대체되었다고 생각합니다. 나는 다른 방법을 시도하고 ... 선택한 송장에있는 모든 항목을 삭제하고 그들을 새로 추가 ... 나는 stackoverflow에 새로운 오전, 나는 당신이 코멘트를 추가하여 알릴해야 그 올바른 방법을 바랍니다. 감사합니다 – MarKay

+0

알려 주셔서 감사합니다. 죄송합니다 그것은 당신을 위해 작동하지 않았다 : - / – dustinfarris