我想找出这两种策略中哪一种是大多数django开发者中首选的策略。
我有一个模型,有一个字段我想通过称为“热度”来订购这些模型。热度是根据此模型中现有的字段计算的。
所以这两条路是:
1) Have a field called "hotness" which the models
can be easily ordered by.
2) Have a method called "get_hotness()", which
returns the hotness of the instance.
但两者都有赞成和反对意见。
如果使用选项1,额外的字段将导致额外的内存消耗,因为模型本身会更重。
对于选项二,实际上没有办法通过django中的models方法过滤查询集,所以我们可能不得不对列表进行操作:
models = sorted(list(Model.objects.all()), key = lamba x: x.get_hotness())
但是再次使用列表操作会增加内存消耗而不仅仅是查询。
因此,如果有人可以帮助这样的事情的首选路线,建议将是真棒!谢谢。
答案 0 :(得分:1)
您需要同时考虑数据大小和不断变化的要求。
如果热度定义保持在一定时间内,我将选择具有热点字段,因为它可以简化选择部分。
如果热度的定义很容易改变,我更喜欢使用get_hotness()方法,因为它不需要更新数据库中预先计算的热度数据。
数据大小是另一个问题,如果你需要通过hotness对整个元素进行排序,使用Models.object.all()将所有数据加载到内存时可能会超出内存限制。