2014-03-31 33 views
0

我正在創建一個一套東西(每件東西都有FK)。我遇到的問題是與視圖(S)。如何一遍又一遍地保存一組東西(自動保存)

我要創建設置事情,然後更新所有事情反覆使用AJAX(如自動保存的那種)。在我的情況下,該集合是SurveySet,事情是Survey

def screen_many(request): 

    if not request.is_ajax(): 

     # get an ordered QuerySet of students 
     students = ids_to_students(request.GET.items()) 
     e_students = ids_to_students(request.GET.items(), 'e') 
     i_students = ids_to_students(request.GET.items(), 'i') 
     survey_count = len(students) 

     # Build a dataset of students with there associated behavior types. 
     data = [{'student':s.pk, 'behavior_type': 'E'} for s in e_students] 
     data += [{'student':s.pk, 'behavior_type': 'I'} for s in i_students] 

     # Use that dataset as initial data for a formset 
     SurveyFormset = formset_factory(SurveyForm, extra=0) 
     survey_formset = SurveyFormset(initial=data) 

     # ... not shown: customizing the crispy form helper 

     # Make a new survey set... 
     ss = SurveySet() 
     ss.user=request.user 
     ss.save() 

    if request.is_ajax(): 
     surveyset = get_object_or_404(SurveySet, pk=ss.pk) 
     surveys = surveyset.survey_set.all() 

     survey_formset = SurveyFormset(request.POST, instance=surveyset) 
     if survey_formset.is_valid(): 
      # Create surveys for this surveyset 
      for form in survey_formset.forms: 
       saved = form.save(commit=False) 
       saved.surveyset = ss 
       saved.save() 

     HttpResponse('saved.') 


    formsetWithStudents = zip(survey_formset.forms, students) 

    c = { 
     'formsetWithStudents' : formsetWithStudents, 
     'students' : students, 
     'survey_count' : survey_count, 
     'e_students': e_students, 
     'i_students': i_students, 
     'survey_formset': survey_formset, 
     } 
    c.update(csrf(request)) 

    return render_to_response("reports/screen_many.html", c) 

如果我的網址是這樣的:http://127.0.0.1:8000/screen_many/?e_1=13&e_2=12&i_1=14視圖進行3次調查將所有的一邊抱怨,有一個

UnboundLocalError at /screen_many/ local variable 'ss' referenced before assignment

我覺得我需要一個單獨的視圖只爲ajax,我希望SurveySet對象只能創建一次。

換句話說,點擊「查看下一個表單」後,我正在填寫更新後的表單。這是在我的模板中。

$('.next').click(function(){ 
     $(this).parent().hide() 
     $(this).parent().next().show() 

     var posting = $.post('/screen_many/', $('form').serializeArray()); 

     posting.done(function(response){ 
      console.log(response) 
    }); 

或者我可以發送POST數據在這裏:

def save_as_you_go(request): 
    if request.is_ajax(): 
     # Get the surveyset from POST 
     ss = request.POST['form-0-surveyset'] 
     surveyset = get_object_or_404(SurveySet, pk=ss) 
     surveys = surveyset.survey_set.all() 
     SurveyFormSet = inlineformset_factory(SurveySet, Survey, form=SurveyForm, can_delete=False, extra=0) 
     survey_formset = SurveyFormSet(request.POST, instance=surveyset) 

     if survey_formset.is_valid(): 
      for form in survey_formset.forms: 
       student = form.save(commit=False) 
       student.surveyset = surveyset 
       student.save() 
     return HttpResponse('saved.') 
    else: 
     return HttpResponseRedirect('/') 

但後來我得到

[u'ManagementForm data is missing or has been tampered with'] 

回答

0

原諒我,如果我的回答似乎天真 - 我是新來的Python和Django的,但它看起來像是在非ajax請求中設置ss變量,然後在ajax請求中引用它。也許你可以在if語句之前設置ss?

#set ss variable before if statements 
    ss = SurveySet() 
    ss.user=request.user 
    ss.save() 

    if not request.is_ajax(): 
    ###do your non-ajax request stuff 
    if request.is_ajax(): 
    ###do your ajax request stuff 
+0

這會使錯誤消失,但每當我嘗試更新一個集合中的東西時,它會創建一個全新的集合,每個集合都有相同的東西。如果我的網址如下所示:http://127.0.0.1:8000/screen_many/?e_1=13&e_2=12&i_1=14由於我使用相同的AJAX視圖,因此該視圖會創建3個調查集。 – broinjc

相關問題