我想做以下事情:用户可以eventrecords
在一个页面上看到他之前创建的所有内容,并且可以对其进行编辑。
我遇到的问题是,如果他编辑其中一个或多个并输入无效的选择,则不会显示验证错误。相反,没有任何反应(如果我if changed_events.is_valid()
在代码中有)或者我得到“ValueError at /coding/assignment/3/ The EventRecord could not be changed because the data didn't validate.” 如果用户输入有效数据,保存就可以了。
我想在页面上显示验证错误,它在创建新条目时已经工作了。
按照我的代码:
视图(我没有发布我的整个视图,因为它相当复杂,其他一切都运行良好。这些是导致不起作用的部分):
##### Show already created events on the page
current_article = paginator.page(current_page).object_list[0]
EventFormSet = modelformset_factory(EventRecord, can_delete=True, exclude=('coder','article','url','last_updated'), extra=0)
event_queryset = EventRecord.objects.filter(article__id=current_article.id).filter(coder=request.user.id)
coded_events = EventFormSet(queryset=event_queryset, prefix="event_form")
elif 'save_changes' in request.POST:
formset = CodingFormSet(prefix="coding_form")
changed_events = EventFormSet(request.POST, prefix="event_form")
# if changed_events.is_valid():
instances = changed_events.save()
try:
history_record = ArticleHistory.objects.filter(article__id=paginator.page(current_page).object_list[0].id).filter(coder=request.user.id)[0]
history_record.last_updated = datetime.datetime.now()
history_record.save()
except:
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
article_history.last_updated = datetime.datetime.now()
article_history.save()
redirect_to = "?page=%s" % current_page
return HttpResponseRedirect(redirect_to)
模板:
{% for eventrecord in coded_events %}
{{ eventrecord.id }}
<div class="form-container">
{% if eventrecord.non_field_errors %}
{{form.non_field_errors}}
{%endif%}
{% for field in eventrecord %}
{% if field.errors %}
<li>{{ field.errors|striptags }}</li>
{% endif %}
{% endfor %}
有谁知道我做错了什么?显然 Django 意识到出了问题,但为什么它不在模板中显示它,而是创建一个错误页面?为什么当我包含is_valid()
? 我真的不知道我应该做什么,非常感谢任何帮助!