gpt4 book ai didi

python - 我如何建模登录数据库?

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:53 25 4
gpt4 key购买 nike

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

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

现在我有两个选择:

首先:

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

  • 简单实现

缺点:

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

第二:

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

优点:

  • 编程方面的简单逻辑

缺点:

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

我不确定,哪个更好?或者我把所有这些问题都弄错了?(好像已经有解决这类问题的模式了?)

最佳答案

例如,在第一个变体中,您可以为您的 Log 模型创建 3 个额外的 QueryManager 并使用它们(它将类似于 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__ 方法来获取合适的管理器,但“显式优于隐式”。

关于python - 我如何建模登录数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com