如何为登录数据库建模?

时间:2013-06-19 05:58:57

标签: python database logging model

我有一个允许用户在我的数据库中保存日志时将视频上传到Youtube的系统,现在的问题是我不知道如何对其进行建模。

使用数据库的日志系统(我使用Django的ORM)被证明过于冗长,因为我需要生成格式良好的页面,以允许“经理”用户查看用户的活动。

现在我有两个选择:

首先:

使用外键和字段来指示类型。 优点:

  • 简单实施

缺点:

  • 我必须查询日志时的额外工作

第二名:

使用继承将日志拆分为3部分:创建,更新和删除。 必须存在创建才能存在视频条目,如果视频条目具有删除日志,则会删除该视频条目。

优点:

  • 编程方面的简单逻辑

缺点:

  • 复杂的模型实现,可能不灵活,以便将来扩展。

我不确定,哪一个更好?或者我把所有这些问题弄错了?(就像已经存在这种问题的模式一样?)

1 个答案:

答案 0 :(得分:3)

例如,在第一个版本中,您可以为QueryManager模型创建另外3个Log并使用它们(它将类似于2个变体但不创建3个其他模型)。

它们可以像create_objectsupdate_objectsdelete_objects或更短(例如create_log)。

以下是经理类的示例:

from django.db.models import Manager

class LogManager(Manager):
    def __init__(self, type):
        super(LogManager, self).__init__()
        # add check of type if you need
        self._type = type

    def get_queryset(self):
        return super(LogManager, self).get_queryset().filter(type=self._type)

此代码仅用于演示(我没有测试)。

在您的模型类中,您应该指定3个额外的管理器,如下所示:

from django.db.models import Model

class Log(Model):
    create_log = LogManager('create')
    update_log = LogManager('update')
    delete_log = LogManager('delete')

或者您可以使用__getattr__方法获取合适的经理,但“明确比隐含更好”。

相关问题