【问题标题】:Dajax function unable to call another functionDajax 函数无法调用另一个函数
【发布时间】:2014-01-12 01:29:38
【问题描述】:

我有一个带有votes 属性的Song 模型。我在每个 Song 对象下方显示了一个 Vote as Favourite 按钮。我希望当用户单击Vote as Favourite 按钮时,与该Song 对象关联的votes 属性应增加1,并且应禁用所有Vote as Favourite 按钮。

HTML

{% for song in dj_song_list %}
    <div>
        <p><h3>{{ song.name }}</h3></p>
        <p class="song_id">{{ song.song_id }}</p>
        <button type="button" class="btn btn-default btn-custom" class='vote' onclick="update();">Vote as Favourite</button>
    </div>
{% endfor %}

ajax.py

def update_votes(id):
    song = Song.objects.get(song_id=id)
    song.votes += 1
    song.save()

@dajaxice_register
def update_disable(request, song_id):
    update_votes(song_id)
    dajax = Dajax()
    dajax.assign('.vote', 'disabled', 'disabled')
    return dajax.json()

JavaScript

function update(){
     Dajaxice.hunt.update_disable(Dajax.process,{'song_id':$('.song_id').val()})
}

按钮禁用部分单独使用时效果很好。但是当我在update_disable() 函数中使用update_votes() 函数时,没有任何效果。我的代码有什么问题?

【问题讨论】:

    标签: javascript ajax django dajaxice dajax


    【解决方案1】:

    AJAX 部分什么都不做,因为它会出错。问题出在update_votes() 函数中。问题可能是:

    • 存在多个具有相同song_id 值的对象
    • id 的歌曲不存在

    尝试使用pdb.set_trace() 进行调试:

    def update_votes(id):
        import pdb; pdb.set_trace()
        song = Song.objects.get(song_id=id)
    

    【讨论】:

    • ID 是我从 Beatport API 获取的每首歌曲的唯一歌曲 ID,它不是主键。
    • 不过,问题出在这一行。检查song_id 的歌曲是否真的存在。
    • 我的Song 模型有一个song_id 字段。
    • 您的update_votes 函数是否获得了有效的id 值?
    • 但是song_id 不是一个唯一字段。我认为这可能是导致问题的原因。如何获取与 Song 对象关联的主键以发送到 update_votes() 函数?
    【解决方案2】:

    我已将Song 模型的votes 属性设置为default=None。因此它无法执行加法操作。我现在改为default=0

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多