首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django -生成一个验证表单的dajaxice函数(dajaxice_register问题)

django -生成一个验证表单的dajaxice函数(dajaxice_register问题)
EN

Stack Overflow用户
提问于 2012-08-31 23:14:13
回答 1查看 410关注 0票数 0

我想做一个泛型函数,用dajaxice实时验证模型表单。

下面是我所做的:

exafeeds/ajax.py

代码语言:javascript
复制
from django.core.exceptions import ValidationError                                  
from django.utils import simplejson                                                 

from dajaxice.decorators import dajaxice_register

def gen_validate_model(models_module):

    @dajaxice_register
    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model

accounts/ajax.py

代码语言:javascript
复制
from exafeeds.ajax import gen_validate_model

import accounts.models

validate_model = gen_validate_model(accounts.models)

和js调用:

代码语言:javascript
复制
Dajaxice.accounts.validate_model(check_validity_callback, {
    'model': 'User',
    'fields': {
        'username': username,
        'email': email
    }
});

但是当我收到一个JS错误,告诉我Dajaxice.accounts是未定义的。

dajaxice_register装饰器显然放错了地方,但是我应该把它放在哪里呢?

编辑。我尝试用下面的代码替换dajaxice_register装饰器:

代码语言:javascript
复制
validate_model = gen_validate_model(accounts.models)
validate_model = dajaxice_register(validate_model)

但这并没有改变任何事情

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-01 21:00:09

我找到了一个解决方案,但它看起来很脏。如果能有更好的解决方案,我会很感激。

exafeeds/ajax.py

代码语言:javascript
复制
from django.core.exceptions import ValidationError
from django.utils import simplejson

def gen_validate_model(models_module):

    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model

accounts/ajax.py

代码语言:javascript
复制
from dajaxice.decorators import dajaxice_register

from exafeeds.ajax import gen_validate_model

import accounts.models

@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models)(request, model, fields)

但是函数生成器变得无用,所以它可以简化为:

exafeeds/ajax.py

代码语言:javascript
复制
def gen_validate_model(models_module, request, model, fields):
    errors = {}

    tmp_model = getattr(models_module, model)()

    for (field, value) in fields.items():
        setattr(tmp_model, field, value)

    try:
        tmp_model.clean_fields()
    except ValidationError, err:
        errs = err.message_dict

        for field in fields:
            errors[field] = errs.get(field)

    return simplejson.dumps(errors)

accounts/ajax.py

代码语言:javascript
复制
@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models, request, model, fields)

相当惊人:|

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12218163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档