Metadata-Version: 1.0
Name: django-generic-m2m
Version: 0.2.1
Summary: relate anything to anything
Home-page: https://github.com/coleifer/django-generic-m2m
Author: Charles Leifer
Author-email: coleifer@gmail.com
License: UNKNOWN
Description: ==================
        django-generic-m2m
        ==================
        
        relate anything to anything.  the image below is a screenshot of the `example app <http://readthedocs.org/docs/django-generic-m2m/en/latest/example.html>`_ 
        and shows a blog post that has been "related" to 2 "Place" models and a "City" model:
        
        .. image:: http://media.charlesleifer.com/images/photos/genericm2m-tagging.png
        
        check the `documentation <http://readthedocs.org/docs/django-generic-m2m/en/latest/>`_ for
        more examples and an in-depth description of the app (or keep reading for
        the 30 second version).
        
        
        what it does
        ------------
        
        the purpose of this project is to allow you to create database-level
        relationships between various objects using a consistent api.
        
        
        example app
        -----------
        
        bundled with the source code is an example app which shows how generic-m2m
        can be used to create "tags" between models.  it uses `nathanborror's basic apps <https://github.com/nathanborror/django-basic-apps>`_
        with `django-completion <https://github.com/coleifer/django-completion>`_ (shameless plug)
        to allow users to "autocomplete" various relationships between models, so if I'm
        a user and want to create a new blog post I can tag it with
        relationships to objects representing a city, a place, a funny photo of a cat, etc.
        
        .. image:: http://media.charlesleifer.com/images/photos/generic-m2m-rel-objs.png
        
        
        quick overview
        --------------
        
        say you have a couple models::
        
            class Food(models.Model):
                name = models.CharField(max_length=255)
        
                related = RelatedObjectsDescriptor()
        
                def __unicode__(self):
                    return self.name
        
        
            class Beverage(models.Model):
                name = models.CharField(max_length=255)
        
                related = RelatedObjectsDescriptor()
        
                def __unicode__(self):
                    return self.name
        
        Here's a sample interactive interpreter session to show the basic API::
        
            >>> pizza = Food.objects.create(name='pizza')
            >>> pepperoni = Food.objects.create(name='pepperoni')
            >>> beer = Beverage.objects.create(name='beer')
            >>> soda = Beverage.objects.create(name='soda')
        
            >>> pizza.related.connect(pepperoni)
            <RelatedObject: pizza related to pepperoni ("")>
        
            >>> pizza.related.connect(beer)
            <RelatedObject: pizza related to beer ("")>
        
            >>> pepperoni.related.related_to()  
            [<RelatedObject: pizza related to pepperoni ("")>]
        
            >>> pizza.related.all()
            [<RelatedObject: pizza related to beer ("")>, <RelatedObject: pizza related to pepperoni ("")>]
        
            >>> pizza.related.all().generic_objects()
            [<Beverage: beer>, <Food: pepperoni>]
        
            >>> Food.related.all()
            [<RelatedObject: pizza related to beer ("")>, <RelatedObject: pizza related to pepperoni ("")>]
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Framework :: Django
