2014-10-29 42 views
0

我想要在formset中獲取特定表單的結果。我嘗試過一個沒有成功的formset和modelformset。無法在django formset中獲取表單值

有了一個formset

我的看法是這樣的:

def display(request, pk=None, action='add'): 
    customer = get_customer(request)   
    qs = CustomerActivity.objects.filter(customer=customer) 


    AuthorFormSet = modelformset_factory(CustomerActivity, form=ActivityEntryForm, extra=0) 
    if request.method == 'POST': 
     formset = AuthorFormSet(request.POST) 

     if form.is_valid: 
      print 'form valied' 
      for form in formset: 
       print form.cleaned_data['duration'] 
      duration = request.POST.get('duration') 
      activity = request.POST.get('activity') 

      print duration 


    else: 
     formset = AuthorFormSet(queryset=qs) 

    context = { 
     'formset':formset, 
    } 
    return render(request, 'activity/activity.html', context) 

我得到一個錯誤:

CustomerActivityForm' object has no attribute 'duration' 

我甚至有一種形式命名CustomerActivityForm,它稱爲ActivityEntryForm:

class ActivityEntryForm(forms.ModelForm): 

    duration = forms.IntegerField(required=False) 

    class Meta: 
     model = CustomerActivity 
     fields = ('duration',) 

我經常表單集嘗試

這是我的觀點:

def display_2(request, pk=None, action='add'): 
    customer = get_customer(request) 
    entered_at, day_start, day_end = get_date_query_elements(request) 


    qs = CustomerActivity.objects.filter(customer=customer).values() 

    ArticleFormSet = formset_factory(ActivityEntryForm, extra=0) 
    if request.method == 'POST': 


     formset = ArticleFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      for form in formset: 
       print form.duration 
      pass 
    else: 
     formset = ArticleFormSet(initial=qs) 

    context = { 
     'formset':formset, 
    } 
    return render(request, 'activity/activity.html', context) 

下面的形式:

class ActivityEntryForm(forms.Form): 
    duration = forms.IntegerField(required=False) 

在這裏,我得到的錯誤:

ActivityEntryForm' object has no attribute 'duration' 

我如何獲得持續時間值?

回答

1

與任何形式一樣,驗證的數據位於form.cleaned_data,這是一本字典。

print form.cleaned_data['duration'] 

這在文檔中有很詳細的解釋。

+0

謝謝。我添加了上面的內容,現在我收到錯誤消息:'CustomerActivityForm'對象沒有'cleaned_data'屬性。我沒有一個名爲CustomerActivityForm的表單,你知道這是從哪裏產生的嗎? – Atma 2014-10-29 21:26:39

+0

這是formset中自動生成的表單。但是如果你使用上面的第一個代碼,問題是你需要實際調用'is_valid()';你錯過了括號。 – 2014-10-29 22:03:30