def _update_descendant_lang_url_paths(self, old_page):
cursor = connection.cursor()
if connection.vendor == 'sqlite':
field_update_fmt = "{0} = %s || substr({0}, %s)"
elif connection.vendor == 'mysql':
field_update_fmt = "{0} = CONCAT(%s, substring({0}, %s))"
elif connection.vendor in ('mssql', 'microsoft'):
field_update_fmt = "{0} = CONCAT(%s, (SUBSTRING({0}, 0, %s)))"
else:
field_update_fmt = "{0} = %s || substring({0} from %s)"
exec_args = []
update_fields_sql = []
for lang_code in mt_settings.AVAILABLE_LANGUAGES:
url_path_attr = build_localized_fieldname('url_path', lang_code)
new_url_path = getattr(self, url_path_attr)
old_url_path = getattr(old_page, url_path_attr)
if new_url_path != old_url_path:
update_fields_sql.append(field_update_fmt.format(url_path_attr))
exec_args.append(new_url_path)
exec_args.append(len(old_url_path) + 1)
if not update_fields_sql:
# in case page was moved but parent did not change
# nothing has to be updated
return
update_sql = """
UPDATE wagtailcore_page
SET {} WHERE path LIKE %s AND id <> %s
""".format(','.join(update_fields_sql))
exec_args.append(self.path + '%')
exec_args.append(self.id)
cursor.execute(update_sql, exec_args)
评论列表
文章目录