2010-11-18 15 views
0

Ich versuche, nach dem Senden eines Kommentars - mithilfe des Django-Kommentar-Frameworks - dem Profil eines Nutzers Punkte hinzuzufügen. Ich denke, ich muss eine post_save verwenden, bin aber nicht ganz ehrlich. HierSo verwenden Sie Post_save in Django

ist, was ich als Methode in meinem models.py haben:

def add_points(request, Comment): 
    if Comment.post_save(): 
     request.user.get_profile().points += 2 
     request.user.get_profile().save() 

Aus den Beispielen von post_save ich gefunden habe, ist dies weit davon entfernt, was gezeigt wird - so denke ich, ich bin weg die Note.

Vielen Dank für Ihre Hilfe.

Antwort

2

Leider ergibt das überhaupt keinen Sinn.

Zum einen kann dies keine Methode sein, da self nicht der erste Parameter ist.

Zweitens scheint es die Klasse zu nehmen, keine Instanz. Sie können die Klasse selbst nicht speichern, nur eine Instanz davon.

Drittens ist post_save keine Methode des Modells (außer Sie haben selbst eine definiert). Es ist ein Signal, und Sie rufen kein Signal auf, Sie fügen ihm einen Signal-Handler hinzu und machen dort Logik. Sie können auch keine Daten von einem Signal an eine Methode zurückgeben.

Und schließlich ist die Profilinstanz, der Sie 2 hinzufügen, nicht unbedingt dieselbe wie die, die Sie in der zweiten Zeile speichern, da Django-Modellinstanzen keine Identität haben. Holen Sie es einmal und legen Sie es in eine Variable, dann speichern Sie das.

Das Framework für Kommentare definiert its own signals, das Sie anstelle des generischen post_save verwenden können. Also, was Sie wirklich brauchen, ist ein Signalhandler auf comment_was_posted zu registrieren. Innerhalb dieses Handlers müssen Sie das Profil des Benutzers abrufen und dieses aktualisieren.

+0

Ja, ich war weg von der Marke ... Ich habe verwendet, was Sie gepostet, und bekam eine AssertionError: Signalempfänger müssen aufrufbar sein. Es sieht aus wie dieser Beitrag den gleichen Fehler bekam: http://stackoverflow.com/questions/2310676/django-signal-via-decorator-on-model-method – Emile

+0

Sorry, hatte den Connect-Anruf falsch herum: bearbeitet, versuchen Sie es es jetzt. –

+0

Danke, es wirft jetzt keinen Fehler, aber scheint noch nicht die get_profile(). Punkte zu aktualisieren. Ich bin mir nicht sicher, ob es angerufen wird. Irgendwelche anderen Vorschläge? Danke nochmal für die Hilfe. – Emile

Verwandte Themen