我已经搜索了周围的堆栈溢出来解答这个(可能很简单)的问题,但是我看到的大多数解决方案似乎过于复杂和难以理解。Django抽象基类的模型字段
我有一个模型“后”,这是一个抽象的基类。模型“公告”和“事件”从Post继承。
现在我正在保存其他模型中的事件和公告的相关列表。例如,我在另一个模型中有“removed_events”和“removed_announcements”字段。
但是,在我的项目中,“removed_events”和“removed_announcements”的处理方式完全相同。没有必要消除“删除的事件”和“删除的公告”之间的歧义。换句话说,跟踪“removed_posts”的字段就足够了。
我不知道如何(或者不能)创建一个字段“removed_posts”,因为Post是抽象的。然而,现在我觉得我在代码中重复自己(并且必须做很多混乱 - 一些检查来确定我正在看的帖子是一个事件还是一个公告,并将它添加到适当的位置删除字段)。
这里最好的选择是什么?我可以使帖子不是抽象的,但Post对象本身不应该创建,我不认为我可以在非抽象对象上强制执行此操作。
我对数据库的理解很薄弱,但我觉得Post非抽象会使数据库由于连接而变得复杂。这是一件大事吗?
最后,还有其他模型中的其他字段,我想将相当于event_list和announcement_list的东西压缩到post_list中,但这些字段确实需要进行消歧。我可以根据帖子类型来过滤post_list,但是对filter()的调用将比分别直接访问事件和公告列表要慢,是不是?这里有什么建议?
非常感谢您阅读本文。
对于这样的解决方案,您可能只需要模型上的通知/事件的GenericForeignKey,而不需要使用中介。 – 2011-04-13 22:35:54
取决于原始多态建模是否具有FK而不是m2m,为true。无论如何,当不再需要时就很难删除外键,而不仅仅是将m2m视为一个FK加一个反(一对一)的反转(软)。如果要使模型具有足够的通用性,则可以使用m2m或monkey修补,如显式的field.contribute_to_class()... – rewritten 2011-04-13 22:43:05