2013-06-28 2 views
0

Хорошо, это, вероятно, действительно очевидная проблема, и я просто не вижу, но мне нужна помощь:очистка формы и обработка не работает - Джанго

В следующей точке зрения, я обрабатывать formset. Если пользователь заполняет форму, я хочу сохранить EventRecord и ArticleHistory, если пользователь покинет форму пустым, я хочу сохранить только ArticleHistory.

def process_form(formset, request, current_page, paginator): 
    if formset.is_valid(): 
     for form in formset.forms: 
      form = form.cleaned_data 

      ##### Check if user filled the form 
      if form["relevance"] == False: 
       pass 
      elif form["relevance"] == True: 

       ##### If user filled the form, save EventRecord 

       event_form = EventRecordForm() 

       event = event_form.save(commit=False) 
       event.article = paginator.page(current_page).object_list[0] 
       event.coder = request.user.coder 
       event.last_updated = datetime.datetime.today() 
       event.event_date = form["event_date"] 
       event.location = form["location"] 
       event.actors = form["actors"] 
       event.num_participants = form["num_participants"] 
       event.issue = form["issue"] 
       event.side = form["side"] 
       event.scope = form["scope"] 
       event.part_violence = form["part_violence"] 
       event.sec_engagement = form["sec_engagement"] 
       event.save() 

     ##### Add info on who worked on the article when 
     history_form = ArticleHistoryForm() 
     article_history = history_form.save(commit=False) 
     article_history.article = paginator.page(current_page).object_list[0] 
     article_history.coder = request.user.coder 
     article_history.last_updated = datetime.datetime.now() 
     article_history.save() 

я пытаюсь сделать это путем очистки формы, как так:

class CodingForm(forms.Form): 

    event_date = forms.DateField(required=False) 
    location = forms.ModelChoiceField(queryset=Location.objects.all(), required=False) 
    actors = forms.CharField(max_length=100, required=False) 
    num_participants = forms.CharField(max_length=200, required=False) 
    issue = forms.CharField(max_length=200, required=False) 
    side = forms.NullBooleanField('Side') 
    scope = forms.TypedChoiceField(choices=SCOPE_CHOICES, coerce=int, empty_value=None) 
    part_violence = forms.TypedChoiceField(choices=PART_VIO, coerce=int, empty_value=None) 
    sec_engagement = forms.TypedChoiceField(choices=SEC_ENG, coerce=int, empty_value=None) 
    relevance = forms.NullBooleanField('Relevance') 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     relevance = cleaned_data.get("relevance") 
     event_date = cleaned_data.get("event_date") 
     location = cleaned_data.get("location") 

     if event_date and location: 
      relevance = True 
     else: 
      relevance = False 

     return cleaned_data 

Однако, если я это сделать, как это - независимо от того, что я делаю - только ArticleHistory не будет сохранен, и не EventRecord.
Что мне не хватает?

ответ

2

В вашем методе clean вы устанавливаете локальную переменную с именем relevance, но ничего не делаете с ней. Я ожидаю, что вы хотите установить cleaned_data['relevance'] вместо True или False.

+0

Dadumm ... спасибо, вот и все! – LukasKawerau

+0

По какой-то странной причине это больше не работает. Я изменил все, как вы предложили, и все получилось отлично. Но теперь я получаю ключевое слово «релевантность» в process_form: if form [«релевантность»] == False: что мне делать? – LukasKawerau