我有一个系统,允许用户将视频上传到 Youtube,同时我在数据库中保存日志,现在的问题是我不知道如何对其进行建模。
事实证明,使用数据库的日志系统(我使用 Django 的 ORM)过于冗长,因为我需要生成格式良好的页面以允许“管理员”用户查看用户的事件。
现在我有两个选择:
第一:
使用外键和字段来指示类型。 优点:
- 简单的实现
缺点:
- 当我必须查询日志时,额外的工作
第二:
使用继承将日志分为三部分:创建、更新和删除。 创建必须存在才能有视频条目存在,如果视频条目有删除日志,则视频条目将被删除。
优点:
- 编程方面的简单逻辑
缺点:
- 模型实现复杂, future 扩展可能不灵活。
不知道哪个更好?或者我把所有这个问题都搞错了?(就像这类问题已经有一个模式了?)
最佳答案
例如,在第一个变体中,您可以为您的 Log
模型创建 3 个附加的 QueryManager
并使用它们(它将与第 2 个变体类似,但无需创建 3 个附加模型)。
它们可以类似于create_objects
、update_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__
方法来获取适当的管理器,但“显式优于隐式”。
关于python - 如何对数据库中的登录进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183862/