2010-11-30 10 views
1

편집 : 문제가 해결되었습니다. 이제 또 다른 문제가 있습니다. 데이터 변수는 "OK"또는 "EXISTS"를 반환 할 때 아무 것도 반환하지 않습니다.Ajax보기에서 개체를 만들 수 없습니다.

나는 오버레이 효과가있는 템플릿이 있습니다. income.html 템플릿에는 양식이 있고 "새 카테고리 추가"버튼을 클릭하면 새 양식이 작은 양식으로 표시됩니다 (오버레이 효과). 나는 이유를 모르지만 카테고리는 만들어지지 않습니다. html 스크립트에서 몇 가지 오류가있는 것 같지만 식별 할 수는 없습니다.

income.html :

(document).ready(function(){ 
$("#new_cat").live("click", (function() {  
    var cat_name = $("#nc").val(); 
    if (cat_name) { 
     $.get("/cashflow/new_cat/0/", { name: cat_name, account: {{ account }} }, 
      function(data){ 
      if (data == "OK") { 
       $("#id_category").val(cat_name); 
      } 
      if (data == "EXISTS") { 
       var error = "The category already exists"; 
       alert(error); 
      } 
      }); 
    } 
    else { 
     var error = "Please enter a name"; 
     alert(error); 
    } 
})) 
}); 
</script> 
... 

<form>{% csrf_token %} 
     <label for="name">Name:</label><input type="text" id="nc" /> 
     <input type="submit" value="Submit" id="new_cat" /> 
</form> 

views.py :이 사기 조금 보이는

@login_required 
def income(request, account_name): 
    account = account_name 
    if request.method == 'POST': 
     form = TransForm(user=request.user, data=request.POST) 
     if form.is_valid(): 
      income = form.save(commit=False) 
      income.type = 0 
      income.account = Account.objects.get(
          name = account_name, 
          user = request.user) 
      income.name = form.cleaned_data['name'] 
      income.category = form.cleaned_data['category'] 
      income.save() 
      uri = ("/cashflow/account/%s") % str(account_name) 
      return HttpResponseRedirect(uri) 

    else: 
     form = TransForm(user=request.user) 

    context = { 
      'TransForm': form, 
      'type': '0', 
      'account': account, 
    } 
    return render_to_response(
     'cashflow/income.html', 
     context, 
     context_instance = RequestContext(request), 
    ) 

def new_cat(request, tipo): 
    if request.method == u'GET': 
     GET = request.GET 
     if GET.has_key(u'name'): 
      name = request.GET[u'name'] 
      account = request.GET[u'account'] 
      c = Category.objects.filter(namee=name, account=account) 
      if c: 
       s = "EXISTS" 
      else: 
       c = Category(name = name, user = request.user, 
         type = type, account = account) 
       c.save() 
       s = "OK" 

    return HttpResponse(s) 
+0

데모를 게시하여 도움이 될만한 문제가 있다면 게시 할 수 있습니다. [JS Fiddle] (http://jsfiddle.net/) 또는 [JS Bin] (http://jsbin.com/)을 제안 할 것입니다. –

답변

1

(나는 tipo가 같다고 생각합니다.) 그 옆에

, 나는 추측 오류가 여기에 있습니다 :

account = request.GET[u'account'] 
c = Category.objects.filter(name=name, account=account) 

계정은 유니 코드 문자열입니다하지만 당신은 범주를 필터링 할 계정 인스턴스가 필요합니다. 이 같은 것이 제대로 작동해야합니다.

account_st = request.GET[u'account'] 
account = Account.objects.get(name=account_st) 
c = Category.objects.filter(name=name, account=account) 
2

:

{ name: cat_name, account: {{ account }} } 

이는 자바 스크립트 블록 내부 렌더링되는 것을 기억하십시오. cat_name은 JS 변수이므로 올바르게 평가됩니다. 그러나 {{ account }}문자열 인으로 렌더링되므로 JS가 문자 그대로입니다. 그래서 그것은 따옴표 안에 있어야합니다 :

{ name: cat_name, account: "{{ account }}" } 
관련 문제