2

我有一个系统允许用户在我的数据库中记录日志的同时将视频上传到 Youtube,现在的问题是我不知道如何建模它。

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

现在我有两个选择:

第一的 :

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

  • 简单的实现

缺点:

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

第二 :

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

优点:

  • 编程方面的简单逻辑

缺点:

  • 复杂的模型实现,对于未来的扩展可能不灵活。

我不确定,哪个更好?还是我把所有这些问题都弄错了?(就像已经有这种问题的模式?)

4

1 回答 1

3

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

它们可以像create_objectsupdate_objects或者delete_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__方法来获得合适的经理,但“显式优于隐式”。

于 2013-06-19T08:09:23.240 回答