2011-02-10 37 views
0

我想问一个问题,我如何在Django中增加一个模型字段。 让假设我有一个名为在Django中自动递增模型字段的值

类我的书签(请求)型号:

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

,然后通过使用Django模板 我有

bookmarks.html

{%在list_tagg%数据库}

网址:{{database.url}}

人气:{{database.popularity}}

{%ENDFOR%}

现在:如果有人点击链接(即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调用来连接到服务器并记录点击。例如,使用jQuery,你可以有这个JS函数调用的每次点击:

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的回答可以简化为以下:

from django.db.models import F 

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