2016-07-28 4 views
0

Ich bin neu in Codierung und haben zur Zeit die Schaltfläche aus dem Online-Buch umgesetzt - Tango mit django:Benötigen Taste Django + Ajax wie das Bilden helfen

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

jedoch für mein Projekt muss ich aufzeichnen die User haben was gemocht und stellen auch sicher, dass sie nur einmal einen Gegenstand mögen (ähnlich wie Instagram/Facebook). Ich habe andere verwandte Fragen online angeschaut, aber festgestellt, dass es keine gut durchdachte Antwort für andere Anfänger gibt. Wenn jemand eine leicht zu befolgende Antwort geben könnte, um mir und anderen Leuten zu helfen, die versuchen, dasselbe in der Zukunft zu erreichen, würde es sehr geschätzt werden!

meine aktuellen Code ist wie folgt:

Modelle

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) 

Ansichten

@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) 

Vorlage

<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(); 
    }); 
}); 
}); 

Antwort

0

Wenn Sie sicher nicht machen wollen User die gleiche UserProject zweimal mag, kann man nicht einfach speichern die Anzahl der Gleichen im project_likes Feld, aber man sollte eher ein separates Modell erstellen (z.B UserLikes) mit ForeignKeys bis User und , und z.B. die Zeit, zu der der Benutzer die mochte. Sie können dann eine Funktion auf Ihrem Modell ausführen, um die Anzahl der Likes zu zählen.

+0

danke, ich weiß, ich brauche ein neues Modell für die Likes, aber verstehe nicht ganz, wie ich das Ajax ändern und anzeigen muss, um es anzupassen. – ollysmall

+0

Beginnen Sie mit der Änderung der Ansicht; Erstellen Sie dort ein neues UserLike-Objekt. – mhkuu

Verwandte Themen