Очистка и обработка форм не работает - Django
Хорошо, это, вероятно, действительно очевидная проблема, и я просто не вижу ее, но мне нужна помощь:
В следующем представлении я обрабатываю набор форм. Если пользователь заполняет форму, я хочу сохранить 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
,
Что мне не хватает?
1 ответ
Решение
В вашем clean
метод, вы устанавливаете локальную переменную с именем relevance
но ничего не делать с этим. Я ожидаю, что вы хотите установить cleaned_data['relevance']
вместо True или False.