我想做一个泛型函数,用dajaxice实时验证模型表单。
下面是我所做的:
exafeeds/ajax.py
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_modelaccounts/ajax.py
from exafeeds.ajax import gen_validate_model
import accounts.models
validate_model = gen_validate_model(accounts.models)和js调用:
Dajaxice.accounts.validate_model(check_validity_callback, {
'model': 'User',
'fields': {
'username': username,
'email': email
}
});但是当我收到一个JS错误,告诉我Dajaxice.accounts是未定义的。
dajaxice_register装饰器显然放错了地方,但是我应该把它放在哪里呢?
编辑。我尝试用下面的代码替换dajaxice_register装饰器:
validate_model = gen_validate_model(accounts.models)
validate_model = dajaxice_register(validate_model)但这并没有改变任何事情
发布于 2012-09-01 21:00:09
我找到了一个解决方案,但它看起来很脏。如果能有更好的解决方案,我会很感激。
exafeeds/ajax.py
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_modelaccounts/ajax.py
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
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
@dajaxice_register
def validate_model(request, model, fields):
return gen_validate_model(accounts.models, request, model, fields)相当惊人:|
https://stackoverflow.com/questions/12218163
复制相似问题