我有一个允许用户在我的数据库中保存日志时将视频上传到Youtube的系统,现在的问题是我不知道如何对其进行建模。
使用数据库的日志系统(我使用Django的ORM)被证明过于冗长,因为我需要生成格式良好的页面,以允许“经理”用户查看用户的活动。
现在我有两个选择:
首先:
使用外键和字段来指示类型。 优点:
缺点:
第二名:
使用继承将日志拆分为3部分:创建,更新和删除。 必须存在创建才能存在视频条目,如果视频条目具有删除日志,则会删除该视频条目。
优点:
缺点:
我不确定,哪一个更好?或者我把所有这些问题弄错了?(就像已经存在这种问题的模式一样?)
答案 0 :(得分:3)
例如,在第一个版本中,您可以为QueryManager
模型创建另外3个Log
并使用它们(它将类似于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__
方法获取合适的经理,但“明确比隐含更好”。