Вы добавили бы приращение в метод NoticeViewSet.retrieve()
.Это метод представления, вызываемый при извлечении одного объекта, поэтому он имеет смысл.Вы также можете добавить это в метод представления list
, но в зависимости от размера набора запросов он может работать довольно медленно.
class NoticeViewSet(viewsets.ModelViewSet):
serializer_class = NoticeSerializer
queryset=Notice.objects.order_by('title')
def retrieve(self, request, *args, **kwargs):
obj = self.get_object()
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().retrieve(request, *args, **kwargs)
Если вы хотите также подсчитывать просмотры при отображении Уведомлений, используйте этокласс:
class NoticeViewSet(viewsets.ModelViewSet):
serializer_class = NoticeSerializer
queryset=Notice.objects.order_by('title')
def retrieve(self, request, *args, **kwargs):
obj = self.get_object()
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().retrieve(request, *args, **kwargs)
def list(self, request, *args, **kwargs):
# You could also increment the view count if people see the `Notice` in a listing.
queryset = self.filter_queryset(self.get_queryset())
for obj in queryset:
obj.view_count = obj.view_count + 1
obj.save(update_fields=("view_count", ))
return super().list(request, *args, **kwargs