【问题标题】:Validate stored data against a form in django根据 django 中的表单验证存储的数据
【发布时间】:2013-08-28 08:14:59
【问题描述】:

显然,当您通过表单保存数据时,您可以通过它的 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

现在我只需要弄清楚模板上的一些列表理解来显示错误!

【问题讨论】:

标签: python django validation


【解决方案1】:

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

form = PersonForm({'firstname':person.firstname,.....})    
is_valid = form.is_valid()

【讨论】:

  • 正确 - 这就是我需要的。很遗憾,您必须指定 dict 和 django 魔法,而不能仅仅从对象中找出您想要的东西。
  • 我找到了一个更好的方法,而不是传递一个dict,你可以.__dict__一个对象来做同样的事情!我知道这必须是可能的! :)
【解决方案2】:

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

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))

【讨论】:

  • 我的辅助函数validate_person() 做了一个form.is_valid() 并在person 的传入实例中返回false,但它通过指定dict 来工作:(
猜你喜欢
  • 2013-01-17
  • 2017-09-18
  • 2011-05-14
  • 2012-12-30
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
相关资源
最近更新 更多