2011-02-10 24 views
0

私はdjangoのモデルフィールドをどのようにインクリメントできるのかという質問をしたいと思います。私はDjangoのモデルフィールドの値を自動インクリメント

bookmarks.htmlを持つDjangoテンプレート を使用して、その後

url=models.URLField() 
    popularity=models.IntegerField() 

と: は私が

クラスの私のブックマーク(要求)と呼ばれるモデルがあるとします

{% list_taggの%でデータベースの}

URL:{{database.url}}

が人気:{{database.popularity}}

{%ENDFOR%}

Now:誰かがリンクをクリックした場合(つまり、 bookmarks.htmlページのURLフィールド)人気を1つ増やしたいと思います。どうすればいいですか?どんな助け?

答えて

4

使用F-フィールド、)

from django.db.models import F 

b = Bookmark.objects.get(pk=id_retrieved) 
b.popularity = F('popularity') + 1 
b.save() 
1

おそらく、サーバーに接続し、クリックを記録するためにAjax呼び出しを実装したいです。

function incrementPopCounter(pop_id) { 
    $.ajax({type: 'POST', 
      dataType: 'json', 
      url: '/pop/increment', 
      data: 'id=' + pop_id, 
      success: function(data) { 
       if(data.result == 'OK') { 
        // handle success 
       } else { 
        // handle failure 
       } 
      } 
      }); 
    return false; 
} 

これは次のようになります処理するためのDjangoビュー:

from django.utils import simplejson 
... 
def increment_pop(request): 
    if request.is_ajax(): 
     if 'pop_id' in request.POST and request.POST['pop_id']: 
      try: 
       pop = Bookmark.objects.get(pk=request.POST['pop_id']) 
      except Bookmark.DoesNotExist: 
       return HttpResponse(simplejson.dumps({'result': 'No bookmark by that id found.'}), 
            mimetype='application/json') 
      pop.popularity = F('popularity') + 1 
      pop.save() 
      return HttpResponse(simplejson.dumps({'result': 'OK'}), 
           mimetype='application/json') 
     else: 
      return HttpResponse(simplejson.dumps({'result': 'Unable to identify the requested bookmark.'}), 
           mimetype='application/json') 
    else: 
     return HttpResponseBadRequest() 
0

Almadの答えは次のように単純化することができたとえば、jQueryのを使用して、あなたはこれがすべてのクリックで呼び出される関数をJS持つことができます:

from django.db.models import F 

Bookmark.objects.get(pk=id_retrieved).update(popularity=F('popularity') + 1) 
関連する問題