我想问一个问题,我怎样才能在django中增加模型字段。 假设我有一个名为
的模型将我的书签(请求)分类:
url=models.URLField() popularity=models.IntegerField()
然后使用Django模板 我有
bookmarks.html
{%list_tagg%}中的数据库
URL:{{database.url}}
热门:{{database.popularity}}
{%endfor%}
现在:如果有人点击了链接(即bookmarks.html页面中的URL字段),我希望人气应该增加1.我该怎么办?有什么帮助吗?
答案 0 :(得分:5)
使用F字段,)
from django.db.models import F
b = Bookmark.objects.get(pk=id_retrieved)
b.popularity = F('popularity') + 1
b.save()
答案 1 :(得分: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()
答案 2 :(得分:0)
Almad的回答可以简化为以下内容:
from django.db.models import F
Bookmark.objects.get(pk=id_retrieved).update(popularity=F('popularity') + 1)