Django / python:遍历字典并向其添加项目

时间:2011-05-24 19:52:20

标签: python django dictionary

对于可能简单的问题道歉,我已经阅读了文档但仍然无法使其正常工作。

我在Django中创建一个原始的SQL查询很长,所以我不会在这里发布 - 只需说它可以工作并返回结果就足够了。

我想遍历我的查询结果并检查带名是否为“[band]”格式并将其重写为“[band],The”。我知道我可以通过SQL做到这一点但是对于大量的行来说性能不是很好,而且我在band模型上有一个函数可以用这种方式排序,但不能在原始SQL查询旁边使用它

这是我的代码:

m = Media.objects.raw('SELECT blah FROM foo')

for index, item in enumerate(m):
        if item.bandname_alt:
            if item.bandname_alt[:4] == 'The ':
                m[index].bandname_sortable = item.bandname_alt[4:] + ', The'

我知道逻辑工作并找到合适的乐队,但无法弄清楚如何将bandname_sortable字段添加到字典中,以便我可以在我的视图中访问它。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

首先,避免原始SQL查询。他们很少需要。然而,这是一个单独的问题。

您可以通过两种方式来调整搜索结果。

在模型中。如果您可以找到避免原始SQL的方法,则可以轻松地向模型添加属性以处理此问题。

class Media( models.Model ):
    @property
    def clean_band_name( self ):
        if self.bandname_alt[:4] == 'The ':
            return self.bandname_alt[4:] + ', The'
        else:
            return self.bandname_alt

您可以使用sorted( list(results), key=lambda x: x.clean_band_name() )

在视图中。使用扩展结果构建简单的元组列表或命名元组列表。

data = [ (cleanup(item.bandname_alt), item) for item in m ]

由于数据是一个简单的序列,因此可以按每个元组中的第一个元素进行排序。

data.sort()

答案 1 :(得分:0)

我假设你提到你有充分的理由进行原始查询。那很好,也许你可以为每个交互实例化一个Media对象,加载你的PK并设置你的值并运行一个.save()?

相关问题