I like DialZ's answer but for performance reasons you should build the query and then hit the database once instead of concatenating all the results into a list:
keyword = 'keyword'
fields = ['foo', 'bar', 'baz']
# this makes an empty queryset object which we can
# add to later using the | operator
results = Item.objects.none()
for field in fields:
lookup = "%s__contains" % field
query = {lookup : keyword}
results = results | Item.objects.filter(**query)
I havn't done one of these in a while, but I'm pretty sure django will not actually hit the database at all in this code. It will only perform a query when you access the data contained in the records