2010-11-30 5 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

new_catビュー(tipoはtypeと同じです)その横に

は、私が推測するエラーはここにある:

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

アカウントは、Unicode文字列ですが、カテゴリーをフィルタリングするために、アカウントのインスタンスを必要とします。このようなものは正常に動作するはずです。

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 }} } 

が、これはJavascriptのブロック内でレンダリングされていることを覚えておいてください。 cat_nameはJS変数なので、正しく評価されます。しかし{{ account }}の文字列にレンダリングされるため、JSがリテラルである限り、したがって、引用符で囲む必要があります。

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