2010-11-30 2 views
1

Редактировать: Проблема решена, теперь у меня другая проблема. Переменная данных ничего не возвращает, когда она должна возвращать «OK» или «EXISTS».Невозможно создать объект из представления Ajax

У меня есть шаблон с эффектом наложения. Шаблон дохода.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/). – 2010-11-30 13:21:32

ответ

1

В представлении new_cat (я думаю, тип 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 }} } 

Помните, что это визуализируется внутри блока Javascript. cat_name - это переменная JS, поэтому она будет правильно оценена. Но {{ account }} отображает строку , так что, насколько это касается JS, это буквальный. Таким образом, это должно быть в котировках:

{ name: cat_name, account: "{{ account }}" } 
Смежные вопросы