首页 > 解决方案 > 在 django 中记录用户活动?

问题描述

我有一个项目,其中一些用户可以执行 CRUD 活动。我想记录谁在什么时候做了什么。目前,我正在考虑制作模型

class UserAction(models.Model):
    user_id = models.CharField(max_length=100)
    action_flag = models.CharField(max_length=100)
    class_id = models.CharField(max_length=100)
    action_taken_at = models.DateTimeField(default=datetime.now())

并制作一个填充我的 UserAction 表的函数。有没有更好的方法来做到这一点?

标签: djangodjango-modelsdjango-usersdjango-logging

解决方案


应用程序/模型.py:

from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey

class Action(models.Model):
    sender = models.ForeignKey(User,related_name='user',on_delete=models.CASCADE)
    verb = models.CharField(max_length=255)
    target_ct = models.ForeignKey(ContentType, blank=True, null=True,
    related_name='target_obj', on_delete=models.CASCADE)
    target_id = models.PositiveIntegerField(null=True, blank=True)
    target = GenericForeignKey('target_ct', 'target_id')
    created = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return self.pk 

应用程序/admin.py

from .models import Action
admin.site.register(Action)

你怎么能用它?
您现在可以在您的任何views.py 中导入此模型(操作)。例如,如果您有一个帖子并且用户喜欢它。您可以只写

Action.objects.create(sender=request.user,verb="likes this post",target=post)

现在当您查看您的管理员时,您会看到 tartget_id=post.pk 在这里我假设用户已通过身份验证,您可以为自己更改它。快乐编码!


推荐阅读