2012-08-31 2 views
0

dajaxice를 사용하여 모델 폼의 유효성을 검사하는 제네릭 함수를 만들고 싶습니다. 여기 django - 양식의 유효성을 검사하는 dajaxice 함수 생성 (dajaxice_register 문제)

내가 무슨 짓을 :

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) 

을하지만 아무것도

답변

0

나는 해결책을 발견을 변경하지 않은,하지만 더러운 보인다. 더 나은 해결책을 고맙게 생각합니다.

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_model 

계정/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/아약스. 파이

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) 

굉장한 awfull : |

관련 문제