Metadata-Version: 2.1
Name: django-materialized-paths
Version: 0.1
Summary: A simple and lightweight implementation of materialized path tree structures in Django.
Home-page: https://github.com/cmcnierney/django-materialized-paths
Author: Cameron McNierney
Author-email: cameron.mcnierney@gmail.com
License: MIT License
Description: # Django Materialized Paths
        
        A simple and lightweight implementation of materialized path tree structures in Django.  
        
        ## Installation
        
        To install, run:
        
        ```
        pip install django-materialized-paths
        ```
        
        ## Configuration
        
        Add the following into the INSTALLED_APPS of your projects: 
        
        ```python
        INSTALLED_APPS = (
         ...
         'django-materialized-paths',
        )
        ```
        
        ## Usage
        
        To use, extend the `BaseNode` into your model:
        
        ```python
        from django-materialized-paths import BaseNode
        
        class FolderExample(BaseNode):
            """My folder class"""
            name = models.CharField(max_length=48)
        ```
        
        The model overrides Django's `django.db.models.Model` save() method to automatically manage changes to inheritance: 
        
        ```python
        from .models import FolderExample # concrete class from above
        
        root = FolderExample.objects.create(name="root")
        child = FolderExample.objects.create(name="child", parent=root)
        grandchild = FolderExample.objects.create(name="child", parent=child)
        ```
        
        For example, to convert `grandchild` to a root:
        
        ```python
        grandchild.parent = None
        grandchild.save()
        ```
        
        ### Usage - Properties and Inherited 
        
        ```python
        BaseNode.depth # Root is 0
        BaseNode.parent
        BaseNode.children # Only returns direct descendants
        
        BaseNode.save() # Set the parent field to automatically manage hierarchy
        BaseNode.delete() # NOTE: The BaseNode.parent field is set to cascade, so deleting a parent will delete all children 
        ```
        
        ### Usage - Methods 
        
        Note that these methods generally return querysets 
        
        ```python
        # Accessors
        
        BaseNode.get_root()
        BaseNode.get_ancestor(depth=int)
        BaseNode.get_ancestors() 
        BaseNode.get_descendants() 
        BaseNode.get_siblings() 
        
        # Convenience
        
        BaseNode.has_children()
        BaseNode.is_child_of(parent_id=int)
        
        # ID-based accessors - computed directly from path without accessing db
        
        BaseNode.get_ancestors_ids()
        BaseNode.get_descendants_ids()
        ```
        
        ## Authors
        
        * **Cameron McNierney** - *Original author* - https://github.com/cmcnierney
        
        ## License
        
        This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
        
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Description-Content-Type: text/markdown
