2013-06-19 216 views
2

我有一个系统,允许用户上传视频到Youtube,而我保持在我的数据库中登录,现在的问题是,我不知道我该如何建模。如何建模登录数据库?

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

现在我有两个选择:

第一:

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

  • 简单的实现

缺点:

  • 额外的作品时,我要查询日志

二:

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

优点:

  • 在编程方面

缺点简单的逻辑:

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

我不确定哪一个更好?或者我得到这一切的问题错了吗?(如已经有这类问题的模式?)

+0

有为什么要在数据库中创建日志,而不是在日志文件中原因是什么?如果您需要报告数据,那么有很好的工具可以为您提供日志文件的实时数据。尝试Splunk或石墨。 –

+0

日志是针对客户端(即“经理”用户)的,它不是'技术性'的。而且,当用户查看视频条目以查看修改历史记录时,我希望生成良好的报告页面。感谢评论,虽然这可能不完全是我在找。 – doomleika

+0

我在第二个选项中没有看到任何优势。你能详细说明你为什么这么想吗? –

回答

3

例如在第一个变体,你可以为你的Log模型创建3个额外的QueryManager和使用它们(这将是类似2变体,但不创建3个附加模型)。

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

+0

谢谢,我对django/python仍然陌生,不知道我能做到这一点。 – doomleika