【发布时间】:2011-08-05 01:46:34
【问题描述】:
我已经在堆栈溢出周围搜索了这个(可能很简单)问题的答案,但我看到的大多数解决方案似乎都过于复杂且难以理解。
我有一个模型“Post”,它是一个抽象基类。模型“公告”和“事件”继承自 Post。
现在我在其他模型中保留了事件和公告的相关列表。例如,我在另一个模型中有“removed_events”和“removed_announcements”字段。
但是,在我的项目中,“removed_events”和“removed_announcements”的处理方式完全相同。无需区分“已删除事件”和“已删除公告”。换句话说,跟踪“removed_posts”的字段就足够了。
我不知道如何(或者可能不能)创建一个字段“removed_posts”,因为 Post 是抽象的。然而,现在我觉得我在代码中重复自己(并且不得不做很多杂乱无章的检查来确定我正在查看的帖子是事件还是公告并将其添加到适当的删除字段)。
这里最好的选择是什么?我可以使 Posts 非抽象,但 Post 对象本身不应该被创建,而且我认为我不能对非抽象对象强制执行此操作。
我对数据库的理解很薄弱,但我的印象是,使 Post 非抽象会使数据库由于连接而变得复杂。这有什么大不了的吗?
最后,我想在其他模型中的其他字段中将相当于 event_list 和announcement_list 的内容压缩为 post_list,但这些字段确实需要消除歧义。我可以根据帖子类型过滤 post_list,但是对 filter() 的调用会比能够分别直接访问事件和公告列表要慢,不是吗?这里有什么建议吗?
非常感谢您阅读本文。
【问题讨论】:
标签: django class abstract base django-queryset