【问题标题】:Can't create an object from an Ajax view无法从 Ajax 视图创建对象
【发布时间】:2011-05-17 21:04:47
【问题描述】:

编辑:问题解决了,现在我又遇到了一个问题。当数据变量应该返回“OK”或“EXISTS”时,它什么也不返回。

我有一个带有叠加效果的模板。 income.html 模板有一个表单和一个“添加新类别”按钮,当您单击它时,会显示一个带有小表单的新窗口(叠加效果)。我不知道为什么,但没有创建类别。似乎我在 html 脚本中有一些错误,但我无法识别它们。

收入.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)

【问题讨论】:

  • 如果您可以发布一个重现问题的演示,那将是一个帮助;我建议JS FiddleJS Bin

标签: jquery django django-templates


【解决方案1】:

在new_cat 视图中(我认为tipo 等于type)。

除此之外,我猜错误就在这里:

account = request.GET[u'account']
c = Category.objects.filter(name=name, account=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 }} 呈现为 string,因此就 JS 而言,它是一个文字。所以它需要用引号引起来:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多