2016-07-28 3 views
0

, как я новичок в кодировании и в настоящее время реализованы кнопки, как в интернет-книги - Танго с Джанго:Нужна помощь в создании Django + Ajax кнопку

http://www.tangowithdjango.com/book17/chapters/ajax.html#add-a-like-button

Однако для моего проекта мне нужно записать, который пользователям понравилось, а также обеспечить, чтобы они могли только как элемент один раз (аналогично instagram/facebook). Я посмотрел на другие связанные вопросы онлайн, но обнаружил, что нет хорошего ответа для других начинающих. Если бы кто-то мог легко ответить на вопросы, чтобы помочь мне и другим людям, которые пытаются достичь того же в будущем, было бы очень полезно!

мой текущий код выглядит следующим образом:

модели

class UserProject(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=100) 
    date_created = models.DateTimeField(auto_now_add=True) 
    project_likes = models.IntegerField(default=0) 
    slug = models.SlugField(max_length=100, unique=True) 

просмотров

@login_required 
def like_project(request): 

    proj_id = None 
    if request.method == 'GET': 
     proj_id = request.GET['project_id'] 

    likes = 0 
    if proj_id: 
     proj = UserProject.objects.get(id=int(proj_id)) 
     if proj: 
      likes = proj.project_likes + 1 
      proj.project_likes = likes 
      proj.save() 

    return HttpResponse(likes) 

шаблон

<strong id="like_count">{{ project.project_likes }}</strong> likes 

      {% if user.is_authenticated %} 
        <button id="likes" data-projid="{{project.id}}" class="btn btn-danger-outline btn-sm" type="button"> <i class="fa fa-heart-o" aria-hidden="true"></i> 

        like 
        </button> 
      {% endif %} 

URL

url(r'^like_project/$', views.like_project, name='like_project'), 

Ajax

$(document).ready(function() { 

$('#likes').click(function(){ 
    var projid; 
    projid = $(this).attr("data-projid"); 
    $.get('/like_project/', {project_id: projid}, function(data){ 
       $('#like_count').html(data); 
       $('#likes').hide(); 
    }); 
}); 
}); 

ответ

0

Если вы хотите, чтобы удостовериться, что никакого User любит то же UserProject дважды, вы не можете просто хранить количество подобных в project_likes поле, но вы должны достаточно создать отдельную модель (например UserLikes) с ForeignKeys до User и UserProject и, например, время, в которое Пользователю понравился UserProject. Затем вы можете сделать функцию на своей модели UserProject, чтобы подсчитать количество понравившихся.

+0

спасибо, я знаю, мне понадобится новая модель для подобных, но не совсем понимаю, как мне нужно изменить Ajax и посмотреть, чтобы разместить его. – ollysmall

+0

Начните с изменения вида; создайте новый объект UserLike. – mhkuu