I have a DetailView something like in views.py:
views.py
class CustomView(DetailView):
context_object_name = \'content\'
You can use self.object
and update it this way:
self.object.clicks = self.object.clicks + 1
self.object.save()
But as Daniel said in comment, using this code you can faced race condition. So it would be better to use F expressions like this:
from django.db.models import F
def get_context_data(self, **kwargs):
data = super(CustomView, self).get_context_data(**kwargs)
self.object.clicks = F('clicks') + 1
self.object.save()
<...snipped...>
return data
neverwalkaloner is very close, but the object needs to be refreshed from the database after it's saved.
from django.db.models import F
def get_context_data(self, **kwargs):
context = super(CustomView, self).get_context_data(**kwargs)
self.object.clicks = F('clicks') + 1
self.object.save()
self.object.refresh_from_db()
<...snipped...>
return context
Now the value of the clicks will be displayed instead of the __repr__
of the F expression.