2017-04-24 69 views
0

首先对不起我的英语:d集模型的字段(Django的)

这是我的代码:

models.py

class Photos(models.Model): 
    username = models.CharField(max_length=50) 
    caption = models.CharField(max_length=150, blank=True, null=True) 
    img = models.ImageField(upload_to = 'userProfile/static/img', null=True, blank=True) 
    update_date = models.DateTimeField(default=timezone.now) 
    category = models.CharField(max_length=50, blank=True, null=True) 
    likes_count = models.IntegerField(blank=True, null=True) 

class Meta: 
    managed = False 
    db_table = 'photos' 

,这是一部分我的js代码产生

<div class="container_card"> 
    <img class="container_card_image" onclick="..." src="/static/img/1/uploads/img1.jpg"> 
</div> 

我想要的html代码,当你点击图片一样,” s_count'在不刷新页面的情况下递增(像instagram或所有社交网络一样)。

然后,如果我使用<a href="{% url 'like' value=user.id %}> <img ...> </a>,并以这种方式定义的视图,它增加了likes_count,但不是很好,因为它refesh每个页面点击

urls.py

urlpatterns = [ 
    ... 
    url(r'^(?P<value>\w+)$', views.like, name='like'), 
] 

意见.py

def like(request, value): 
    photo = Photos.objects.get(pk=value) 
    photo.likes_count += 1 
    photo.save() 
    return redirect('home') 

有没有办法得到我想要的东西?

+1

寻找“AJAX”。 –

回答

0

为了得到你想要的,你需要使用ajax。 例如jquery真的很简单,很容易做出ajax请求并处理响应。 https://api.jquery.com/jquery.get/

$.post("photo/15/like", function(data) { 
    // here you handle the response. 
}); 

除了你的Django视图不应该将您重定向到另一个网页,因为这将导致整个页面刷新。相反,你应该使用JsonReponse

def get(self, request, *args, **kwargs): 
    photo = Photos.objects.get(pk=value) 
    photo.likes_count += 1 
    photo.save() 
    return JsonResponse({'action': 'success'}, safe=False) 

更先进的,你可以使用一个整体框架,处理像http://www.django-rest-framework.org/ JSON响应,并写更少的代码使用一些基于类的意见http://www.cdrf.co/