Django - 覆盖模型的保存/删除功能,而不是在视图中执行

时间:2013-05-07 06:41:56

标签: python django django-models django-views

我有一个模型Quote,它有一个用户模型的外键。用户可以有0到10个引号,如果有/或他有一个或多个引号,则其中一个应该是主引号(primary是引用模型的字段)。

当用户添加报价时,会检查用户是否有其他报价,如果没有,则将新报价设置为主报价。当主要报价被删除时,如果用户有任何其他报价,则将另一个报价设置为主要报价。

现在我在各自的观点中这样做。我想知道是否更好地覆盖模型的savedelete函数并在那里完成所有这些。

那么在模型或视图中执行这些任务的正确位置是什么?

1 个答案:

答案 0 :(得分:6)

普遍的共识是,厚模型和助手,薄视图。换句话说,您的观点应该尽可能简单;你的模型尽可能丰富,并为边远位提供大量的帮助代码。

另请注意,如果您覆盖模型方法,则提供一种“保证”,无论ORM如何被访问,您的规则都将被应用。如果只在视图中执行逻辑,那么在其他地方;例如,使用自定义管理命令或django shell,模板标记,甚至在另一个视图中,您的规则可能无法应用。