Django技术问询:如何为QuerySet中的对象添加自定义属性
你的实现完全可行,还有这些优化小技巧!
嘿,作为Django新手能想到这个思路已经很赞啦!你的实现方式是完全没问题的——遍历查询到的Terms子集,给每个实例动态添加colour属性,空term用灰色,相同term映射同一种颜色,逻辑清晰易懂,在大多数场景下(比如生成SVG的小数据集)都能很好地工作。
不过咱们可以把代码再简化一点,利用字典的get()方法来合并你的if-else逻辑,让代码更简洁:
data = Terms.objects.filter(language=language_id) for d in data: # 如果d.term存在于termColours中就取对应颜色,否则用灰色(包括d.term为None的情况) d.colour = termColours.get(d.term, "#D3D3D3")
这样写的好处是不用单独判断d.term is None,因为当d.term是None时,termColours.get(None, "#D3D3D3")会直接返回默认的灰色,和你原来的逻辑完全一致,但代码更短更紧凑。
如果之后你遇到数据集特别大的情况,遍历每个实例可能会有点性能开销,那可以考虑先批量提取所有term值,生成颜色映射后再批量关联,但对于生成SVG这种场景来说,你的初始方案或者上面的简化版已经足够好用了,没必要过早优化。
总的来说,你的思路是对的,完全可以放心用,简化后的版本只是让代码更优雅一点而已~
内容的提问来源于stack exchange,提问作者SamPassmore
相关产品推荐
相关产品推荐

