def get_form_types(): global _FORM_CONTENT_TYPES if _FORM_CONTENT_TYPES is None: _FORM_CONTENT_TYPES = [ ct for ct in get_page_types() if issubclass(ct.model_class(), AbstractForm) ] return _FORM_CONTENT_TYPES
def add_subpage(request, parent_page_id): parent_page = get_object_or_404(Page, id=parent_page_id).specific if not parent_page.permissions_for_user(request.user).can_add_subpage(): raise PermissionDenied page_types = sorted([ContentType.objects.get_for_model(model_class) for model_class in parent_page.clean_subpage_types()], key=lambda pagetype: pagetype.name.lower()) all_page_types = sorted(get_page_types(), key=lambda pagetype: pagetype.name.lower()) return render(request, 'wagtailadmin/pages/add_subpage.html', { 'parent_page': parent_page, 'page_types': page_types, 'all_page_types': all_page_types, })
def handle(self, from_text, to_text, **options): for revision in PageRevision.objects.filter(content_json__contains=from_text): revision.content_json = revision.content_json.replace(from_text, to_text) revision.save(update_fields=['content_json']) for content_type in get_page_types(): self.stdout.write("scanning %s" % content_type.name) page_class = content_type.model_class() child_relation_names = [rel.get_accessor_name() for rel in get_all_child_relations(page_class)] for page in page_class.objects.all(): replace_in_model(page, from_text, to_text) for child_rel in child_relation_names: for child in getattr(page, child_rel).all(): replace_in_model(child, from_text, to_text)
def select_type(request): # Get the list of page types that can be created within the pages that currently exist existing_page_types = ContentType.objects.raw(""" SELECT DISTINCT content_type_id AS id FROM wagtailcore_page """) all_page_types = sorted(get_page_types(), key=lambda pagetype: pagetype.name.lower()) page_types = set() for content_type in existing_page_types: allowed_subpage_types = content_type.model_class().clean_subpage_types() for subpage_type in allowed_subpage_types: subpage_content_type = ContentType.objects.get_for_model(subpage_type) page_types.add(subpage_content_type) return render(request, 'wagtailadmin/pages/select_type.html', { 'page_types': page_types, 'all_page_types': all_page_types })
def handle(self, from_text, to_text, **options): for revision in PageRevision.objects.filter(content_json__contains=from_text): revision.content_json = revision.content_json.replace(from_text, to_text) revision.save(update_fields=['content_json']) for content_type in get_page_types(): print "scanning %s" % content_type.name page_class = content_type.model_class() try: child_relation_names = [rel.get_accessor_name() for rel in page_class._meta.child_relations] except AttributeError: child_relation_names = [] for page in page_class.objects.all(): replace_in_model(page, from_text, to_text) for child_rel in child_relation_names: for child in getattr(page, child_rel).all(): replace_in_model(child, from_text, to_text)
def handle(self, fix=False, **options): for content_type in get_page_types(): print "scanning %s" % content_type.name page_class = content_type.model_class() if not hasattr(page_class._meta, 'child_relations'): continue relations_by_name = {} for rel in page_class._meta.child_relations: relations_by_name[rel.get_accessor_name()] = rel for page in page_class.objects.all(): revision = page.revisions.order_by('-created_at').first() if not revision: continue revision_data = json.loads(revision.content_json) for (rel_name, rel) in relations_by_name.iteritems(): for child in revision_data.get(rel_name, []): pk = child.get('pk') if pk: try: rel.model.objects.get(pk=pk) except rel.model.DoesNotExist: print "No %s with ID %d found (linked from page %d)" % (rel.model.__name__, pk, page.id) # Fix if fix: obj = model_from_serializable_data(rel.model, child) obj._state.adding = True obj.save() print "Fixed"
def handle(self, from_text, to_text, **options): for revision in PageRevision.objects.filter( content_json__contains=from_text): revision.content_json = revision.content_json.replace( from_text, to_text) revision.save(update_fields=['content_json']) for content_type in get_page_types(): print "scanning %s" % content_type.name page_class = content_type.model_class() try: child_relation_names = [ rel.get_accessor_name() for rel in page_class._meta.child_relations ] except AttributeError: child_relation_names = [] for page in page_class.objects.all(): replace_in_model(page, from_text, to_text) for child_rel in child_relation_names: for child in getattr(page, child_rel).all(): replace_in_model(child, from_text, to_text)