我想做一个通用函数来使用 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_model
帐户/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)
但这并没有改变任何东西