0

显然,当您通过表单保存数据时,您可以通过它的 clean 方法运行验证,但是如果您想在每次查看数据时重新验证该数据,您可以再次运行表单的 clean 方法吗?

我在想这个观点会沿着以下方向发展;

def detail(request, person_id=None):
    """
    Renders an individual person
    @param employer_id: The id of employer to view
    @param request: HttpRequest
    @return: HttpResponse
    """
    person = get_object_or_404(People, pk=person_id)

    validation_form = AddForm(instance=person)
    is_valid = validate_person(validation_form)

    return render_to_response(
        'person/detail.html',
        {
            'is_valid':     is_valid,
        },
        context_instance=RequestContext(request))

但是“正确”的做法是什么validate_person()

解决方案

我发现一个对象有一个.__dict__方法,所以我的解决方案是;

form = AddForm(person.__dict__)
is_valid, errors = validate_person(form)

然后我的辅助函数可以返回表单是否有效,如果有错误则返回;

def validate_person(form):
    """
    Validate that the data stored for the person passes validation.

    @param person: Person object
    @param form: Form
    @return: Boolean
    """
    if form.is_valid():
        return True, None
    else:
        return False, form.errors

现在我只需要在模板上找出一些列表理解来显示错误!

4

2 回答 2

0

是的。你可以这样做。将数据从人员对象传递到 PersonForm。请参阅示例。

form = PersonForm({'firstname':person.firstname,.....})    
is_valid = form.is_valid()
于 2013-08-28T08:22:37.547 回答
0

我认为你已经拥有的和斯里尼瓦斯建议的结合起来会起作用:

def detail(request, person_id=None):
    """
    Renders an individual person
    @param employer_id: The id of employer to view
    @param request: HttpRequest
    @return: HttpResponse
    """
    person = get_object_or_404(People, pk=person_id)

    validation_form = AddForm(instance=person)

    return render_to_response(
        'person/detail.html',
        {
            'is_valid':     validation_form.is_valid(),
        },
        context_instance=RequestContext(request))
于 2013-08-28T08:35:06.923 回答