2011-02-10 4 views
0

나는 django에서 모델 필드를 어떻게 증가시킬 수 있는지 질문하고 싶습니다. 내가장고 모델 필드의 값을 자동으로 증가

bookmarks.html이 장고 템플릿 을 사용하여 다음

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

과 : 내가

클래스 내 북마크 (요청)라는 모델이 있다고 가정 할 수 있습니다

{ list_tagg의 %에서 데이터베이스}에 대한

URL : {{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; 
} 

이 다음과 같을 수 처리하는 장고보기 :

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) 
관련 문제