este es mi código:
modelos.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'y esta es una parte del código html que produce mi código js
<div class="container_card"> <img class="container_card_image" onclick="..." src="/static/img/1/uploads/img1.jpg"> </div>Quiero que cuando haga clic en la imagen, se incremente 'likes_count' sin actualizar la página (como instagram o como todas las redes sociales).
Luego, si uso <a href="{% url 'like' value=user.id %}> <img ...> </a> y una vista definida de esta manera, aumenta el número de likes pero no es bueno porque refresca la página para cada clic
urls.py
urlpatterns = [ ... url(r'^(?P<value>\w+)$', views.like, name='like'), ]vistas.py
def like(request, value): photo = Photos.objects.get(pk=value) photo.likes_count += 1 photo.save() return redirect('home')¿Hay alguna manera de conseguir lo que quiero?
Para obtener lo que quieres, necesitas usar ajax. Por ejemplo, jquery es realmente simple y fácil de hacer una solicitud ajax y manejar la respuesta. https://api.jquery.com/jquery.get/
$.post( "photo/15/like", function( data ) { // here you handle the response. });Además, su vista de django no debería redirigirlo a otra página, porque esto hará que toda la página se actualice. En su lugar, debe usar un 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)Más avanzado, puede usar un marco completo que maneja respuestas json como http://www.django-rest-framework.org/ , y para escribir menos código use algunas de las vistas basadas en clases http://www.cdrf.co/