Как я могу использовать эти objectmixins в моих функциональных представлениях?

Я пытаюсь реализовать приложение для отслеживания активности пользователя в моем проекте. Я хочу отслеживать каждый клик пользователя. Может ли кто-нибудь помочь мне в реализации этого.

Хотя я пытался, я застрял здесь при получении объектов. Помогите мне внедрить эти объектные миксины в мои функциональные представления

Вот мой models.py:

# Create your models here.
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
from django.conf import settings

from .signals import object_viewed_signal

User = settings.AUTH_USER_MODEL


class History(models.Model):
    user            = models.ForeignKey(User, on_delete=models.CASCADE)
    content_type    = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True) 
    object_id       = models.PositiveIntegerField() 
    content_object  = GenericForeignKey() 
    viewed_on       = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "%s viewed: %s" %(self.content_object, self.viewed_on)

    class Meta:
        verbose_name_plural = "Histories"

def object_viewed_receiver(sender, instance, request, *args, **kwargs):
    new_history = History.objects.create(
        user    = request.user,
        content_type    = ContentType.objects.get_for_model(sender),
        object_id      = instance.id
    )

object_viewed_signal.connect(object_viewed_receiver)

и это мой views.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import render, redirect
from django.views.generic import ListView, View
from django.views.generic.detail import SingleObjectMixin

from .models import History

from django.shortcuts import render

# Create your views here.
from django.shortcuts import render, redirect
from django.views.generic import ListView, View
from django.views.generic.detail import SingleObjectMixin

from .models import History

class HistoryList(ListView):
    def get_queryset(self):
        user_history = History.objects.filter(user=self.request.user)
        return user_history


class HistoryDelete(SingleObjectMixin, View):
    model = History
    def get(self, request, *args, **kwargs):
        obj = self.get_object()
        if obj is not None:
            obj.delete()
        return redirect('history')

Вот мой файл signals.py

from django.dispatch import Signal

object_viewed_signal = Signal(providing_args=['instance', 'request'])

Вот мой mixins.py

from .signals import object_viewed_signal

class ObjectViewMixin:
    def dispatch(self, request, *args, **kwargs):
        try:
            instance = self.get_object()
        except:
            instance = None
        
        if request.user.is_authenticated and instance is not None:
            object_viewed_signal.send(instance.__class__, instance=instance, request=request)

        return super(ObjectViewMixin, self).dispatch(request, *args, **kwargs)
    

и я хочу использовать этот код с моими функциями.

@login_required
def UpdateProfile(request, slug):
    user = Profile.objects.get(slug=slug)
    if request.method == "POST":
        form = UpdateProfileForm(request.POST, request.FILES, instance=user)
        if form.is_valid():
            profile_pic = form.cleaned_data['profile_pic']
            form.profile_pic = profile_pic
            form.save()
            messages.success(request,"Data Updated successfully")
            return HttpResponseRedirect(reverse('updateaddress', args=(request.user.profile.slug,)))
        else:
            messages.error(request, "Please check all fields are valid")
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        form = UpdateProfileForm(instance=user)
    context = {
        'user':user,
        'form':form,
    }
    return render(request, "authentication/register/update/profile.html",context)

Любое предложение будет оценено по достоинству...

Вернуться на верх