2011-02-10 2 views
0

Я хочу задать вопрос, как я могу увеличить поле модели в django. позволяет предположить, что у меня есть модель под названиемAuto-incrementing значение поля модели в Django

класс мои закладки (запросы):

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

, а затем с помощью шаблона Django у меня есть

bookmarks.html

{% для базы данных в list_tagg%}

URL: {{}} database.url

ПОПУЛЯРНОСТЬ: {{}} database.popularity

{% ENDFOR%}

Теперь: если кто-то нажимает на ссылку (т.е. поле URL на странице bookmarks.html) Я бы хотел, чтобы популярность была увеличена на 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)