Автоинкрементное значение поля модели в Django - PullRequest
0 голосов
/ 10 февраля 2011

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

. Класс моих закладок (запросов):

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

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

bookmarks.html

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

URL: {{database.url}}

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

{% endfor%}

Сейчас: если кто-нибудь нажмет на ссылку (то есть поле URL на странице bookmarks.html)) Мне бы хотелось, чтобы популярность была увеличена на 1. Как я могу это сделать?Любая помощь?

Ответы [ 3 ]

5 голосов
/ 10 февраля 2011

Использовать F-поля,)

from django.db.models import F

b = Bookmark.objects.get(pk=id_retrieved)
b.popularity = F('popularity') + 1
b.save()
1 голос
/ 10 февраля 2011

Возможно, вы хотите реализовать 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 голосов
/ 20 июня 2014

Алмада ответ можно упростить до следующего:

from django.db.models import F

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