def get_related_where(self, fk_name, using, type): related_where = ["%s=%s.%s" % (self.model._meta.pk.get_attname_column()[1], type, fk_name)] related_query = Query(self.manager.related.model) for name, value in self.filter.iteritems(): related_query.add_filter((name, value)) related_query.add_extra(None, None, ["%s=%s.%s" % (self.model._meta.pk.get_attname_column()[1], type, self.manager.related.field.m2m_column_name())], None, None, None) related_query.add_count_column() related_query.clear_ordering(force_empty=True) related_query.default_cols = False related_filter_where, related_where_params = related_query.get_compiler(using=using, connection=connection).as_sql() if related_filter_where is not None: related_where.append('(' + related_filter_where + ') > 0') return related_where, related_where_params
def get_related_where(self, fk_name, using, type): related_where = [ "%s=%s.%s" % (self.model._meta.pk.get_attname_column()[1], type, fk_name) ] related_query = Query(self.manager.related.model) for name, value in self.filter.iteritems(): related_query.add_filter((name, value)) related_query.add_extra(None, None, [ "%s=%s.%s" % (self.model._meta.pk.get_attname_column()[1], type, self.manager.related.field.m2m_column_name()) ], None, None, None) related_query.add_count_column() related_query.clear_ordering(force_empty=True) related_query.default_cols = False related_filter_where, related_where_params = related_query.get_compiler( using=using, connection=connection).as_sql() if related_filter_where is not None: related_where.append('(' + related_filter_where + ') > 0') return related_where, related_where_params
def replace_media_urls(old='stories', new='news/old', app_label='news', model='newsitem', field='full_text', new_path='/media/'): from django.db.models import get_model from django.db.models.query import QuerySet from django.db.models.sql import Query BASE_NEW_PATH = new_path BASE_OLD_RE = r'http:\/\/w{3}\.otdohniomsk\.ru\/images\/' BASE_OLD_PATH = 'http://www.otdohniomsk.ru/images/' old_path = BASE_OLD_PATH + old new_path = BASE_NEW_PATH + new p = re.compile(BASE_OLD_RE + old) total_count = 0 m = get_model(app_label, model) q = Query(m) q.add_filter(('%s__contains' % field, old_path)) qs = QuerySet(m, q) for item in qs: item.__dict__[field], count = p.subn(new_path, item.__dict__[field]) total_count += count item.save() return total_count