验证更改的查询集无法正常工作 - Django

时间:2013-08-18 09:41:20

标签: django django-queryset django-validation

我想做以下事情: 用户可以在一个页面上看到他之前创建的所有eventrecords,并且可以对其进行编辑。

我遇到的问题是,如果他编辑了其中一个或多个并输入了无效选项,则不会显示验证错误。相反,没有任何反应(如果我在代码中有if changed_events.is_valid())或我得到“ValueError at / coding / assignment / 3 / 无法更改EventRecord,因为数据未验证。“如果用户输入有效数据,则保存工作正常。

我想在页面上显示验证错误,以及创建新条目时的工作方式。

关注我的代码:

视图(我没有发布我的整个视图,因为它相当复杂,其他一切都工作正常。这些是负责什么不起作用的部分):

##### 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()时,为什么没有发生什么? 我真的不知道我应该做什么,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

哦,伙计,这是愚蠢的: 在发布我的问题后,我在工作了几天之后看到了答案。

这是出了什么问题:

将查询集作为coded_events传递给模板。 在save_changes操作期间,我将其重命名为changed_events,如果验证错误,则无法将其传回模板。

修好后,一切正常。