import fileinput
import re
import sys
active_model = ""
for line in fileinput.input():
if active_model == "" and not line.startswith("class"):
sys.stdout.write(line)
continue
if line.startswith("#"):
sys.stdout.write(line)
continue
if line.startswith("class"):
active_model = re.findall("class\ (.*)\(models.Model\):", line)[0]
sys.stdout.write(line)
continue
if "models.ForeignKey" in line:
line = re.sub("ForeignKey\((.*),", "ForeignKey('\\1',", line)
line = re.sub("''self''", "'self'", line)
db_column = re.findall("db_column='(.*)'", line)[0]
line = re.sub("\)$", ", related_name='%s_%s')" % (active_model.lower(), db_column), line)
sys.stdout.write(line)
continue
sys.stdout.write(line)
Comments
Nice idea, but it doesn't work in all cases. In particular it seems to fail in two ways for ForeignKey tables where the primary key ends in _id. Needs better re parsing.
#