Ich habe die folgende Klasse:Django: Detailansicht, Wo wird ein Zähler aktualisiert?
class ImageGalleryDetail(DetailView):
model = ImageGallery
template_name = 'galleries/imagegallery_detail.html'
def get_context_data(self, **kwargs):
context = super(ImageGalleryDetail, self).get_context_data(**kwargs)
context['image'] = self.object
context['gallery'] = self.object.owner_gallery
return context
def update_counter(self):
self.object.hits = F('hits') + 1
self.object.save()
Und wie man sehen kann ich eine Methode namens haben update_counter()
, wo ich eine F expression
verwendet, um atomar einen Zähler zu aktualisieren.
Meine Frage ist, wo sollte ich den Anruf zu dieser Funktion finden? So wie ich es sehe Ich könnte es in der get_context_data()
-Methode finden, aber es klingt seltsam für mich, der Name der Methode beginnt mit erhalten nicht gesetzt. Und ich denke, ich sollte nicht Sachen modellbezogene dort gespart werden ...
Method Flowchart von Detailview ist die folgende (Anfänger hier!):
1. dispatch()
2. http_method_not_allowed()
3. get_template_names()
4. get_slug_field()
5. get_queryset()
6. get_object()
7. get_context_object_name()
8. get_context_data()
9. get()
10. render_to_response()
Also ich habe ehrlich gesagt keine Ahnung, welche Methode sollte Ich überschreibe, um update_counter
Funktion zu rufen. Jede Hilfe wäre willkommen. Oder wenn das die falsche Art ist Dinge zu tun ... das würde ich auch gerne wissen! :)
Sie besser dieses Zählverfahren in das Modell definieren würde sich Bilddatenbank oder einen benutzerdefinierten Manager für ihn definieren. Nur für den Fall, dass der Logic Out-of-View-Teil nicht angezeigt wird. – sheshkovsky
@sheshkovsky Ich teile Ihre Gedanken dazu. Möchten Sie nur die einfachsten Beispiele, wie dies in der ImageGallery selbst gemacht wird, teilen? Ich werde das zu schätzen wissen und es als Antwort auf meine Frage akzeptieren :-) – gglasses
Ich habe meine Ideen als Antwort geschrieben. Aber ich bin nicht sicher, wo Sie diese Methoden in Ihren Ansichten nennen sollten. – sheshkovsky