{ "info": { "author": "Charles Leifer", "author_email": "coleifer@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "==================\ndjango-generic-m2m\n==================\n\nrelate anything to anything. the image below is a screenshot of the `example app `_ \nand shows a blog post that has been \"related\" to 2 \"Place\" models and a \"City\" model:\n\n.. image:: http://media.charlesleifer.com/images/photos/genericm2m-tagging.png\n\ncheck the `documentation `_ for\nmore examples and an in-depth description of the app (or keep reading for\nthe 30 second version).\n\n\nwhat it does\n------------\n\nthe purpose of this project is to allow you to create database-level\nrelationships between various objects using a consistent api.\n\n\nexample app\n-----------\n\nbundled with the source code is an example app which shows how generic-m2m\ncan be used to create \"tags\" between models. it uses `nathanborror's basic apps `_\nwith `django-completion `_ (shameless plug)\nto allow users to \"autocomplete\" various relationships between models, so if I'm\na user and want to create a new blog post I can tag it with\nrelationships to objects representing a city, a place, a funny photo of a cat, etc.\n\n.. image:: http://media.charlesleifer.com/images/photos/generic-m2m-rel-objs.png\n\n\nquick overview\n--------------\n\nsay you have a couple models::\n\n class Food(models.Model):\n name = models.CharField(max_length=255)\n\n related = RelatedObjectsDescriptor()\n\n def __unicode__(self):\n return self.name\n\n\n class Beverage(models.Model):\n name = models.CharField(max_length=255)\n\n related = RelatedObjectsDescriptor()\n\n def __unicode__(self):\n return self.name\n\nHere's a sample interactive interpreter session to show the basic API::\n\n >>> pizza = Food.objects.create(name='pizza')\n >>> pepperoni = Food.objects.create(name='pepperoni')\n >>> beer = Beverage.objects.create(name='beer')\n >>> soda = Beverage.objects.create(name='soda')\n\n >>> pizza.related.connect(pepperoni)\n \n\n >>> pizza.related.connect(beer)\n \n\n >>> pepperoni.related.related_to() \n []\n\n >>> pizza.related.all()\n [, ]\n\n >>> pizza.related.all().generic_objects()\n [, ]\n\n >>> Food.related.all()\n [, ]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/coleifer/django-generic-m2m", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django-generic-m2m", "package_url": "https://pypi.org/project/django-generic-m2m/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-generic-m2m/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/coleifer/django-generic-m2m" }, "release_url": "https://pypi.org/project/django-generic-m2m/0.3.1/", "requires_dist": null, "requires_python": null, "summary": "relate anything to anything", "version": "0.3.1" }, "last_serial": 2426046, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2319dea123b1b7502878fcc2047ade2e", "sha256": "2ec61372de985fd63d9f37556669cb2fbe1f6a7089f84437816e212c2f1abf42" }, "downloads": -1, "filename": "django-generic-m2m-0.1.0.tar.gz", "has_sig": false, "md5_digest": "2319dea123b1b7502878fcc2047ade2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3920, "upload_time": "2011-02-17T20:29:17", "url": "https://files.pythonhosted.org/packages/33/c6/3f6d875856e966758ee30a4c38a311288b86069c362d22d747180b018929/django-generic-m2m-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c5c007ba7ad6daf57d1ba607409ce579", "sha256": "ccc5c296fc342db19c689009b55edc65cf4680c84ba7ae8435702a10a26b665f" }, "downloads": -1, "filename": "django-generic-m2m-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c5c007ba7ad6daf57d1ba607409ce579", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9657, "upload_time": "2011-07-11T23:19:21", "url": "https://files.pythonhosted.org/packages/e2/38/cfe3af249876edd1e58cd1e3fe501d313213ffec6993883cb1b0ef50cd09/django-generic-m2m-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "d68cb0b9d8d6883bbcfe212007b534cb", "sha256": "2970eaacfed949430ba771b0f964421982386ddb6a22680b608312f6b59b32e9" }, "downloads": -1, "filename": "django-generic-m2m-0.2.1.tar.gz", "has_sig": false, "md5_digest": "d68cb0b9d8d6883bbcfe212007b534cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10296, "upload_time": "2011-12-03T20:54:11", "url": "https://files.pythonhosted.org/packages/37/06/718d72b5be56d17485514591c548e756750385cac72c6192d6ff3db27c14/django-generic-m2m-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "8ab1cdab38a125e57163a3980d3d7241", "sha256": "63ebd62d22f7f1142bf55eb20d5c07b122d4b9f4c96d5b5ff7d8dab472c6bd1b" }, "downloads": -1, "filename": "django-generic-m2m-0.2.2.tar.gz", "has_sig": false, "md5_digest": "8ab1cdab38a125e57163a3980d3d7241", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11206, "upload_time": "2013-12-10T04:28:34", "url": "https://files.pythonhosted.org/packages/30/b4/cceb6c370fe2b47ebf965f43972b902206ff02ebea205eeabab889321ef0/django-generic-m2m-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fc23f2143848fda5e4c1ca7a8bae28cf", "sha256": "c8a10aa5024e05a1346b82ce7c0fe378cd5e3fb164d65f5a97da7e3c03b72c2b" }, "downloads": -1, "filename": "django-generic-m2m-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fc23f2143848fda5e4c1ca7a8bae28cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11379, "upload_time": "2015-01-24T04:32:29", "url": "https://files.pythonhosted.org/packages/19/bc/30f783ebaa0468e693f92b1a783924375477a4ae922b5c4dcfbc4180e894/django-generic-m2m-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "4c0210c0f38242aad1a90a67c6f783c1", "sha256": "88a181b5d4ed1140a7a2957dac3de255fc7cbdb6806238ddf8f79f75b84858ec" }, "downloads": -1, "filename": "django-generic-m2m-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4c0210c0f38242aad1a90a67c6f783c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9212, "upload_time": "2016-10-27T12:27:26", "url": "https://files.pythonhosted.org/packages/f7/87/ea20f90aab82e957251a03a90565be27857c3d2ca2292f0c344c364176c9/django-generic-m2m-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4c0210c0f38242aad1a90a67c6f783c1", "sha256": "88a181b5d4ed1140a7a2957dac3de255fc7cbdb6806238ddf8f79f75b84858ec" }, "downloads": -1, "filename": "django-generic-m2m-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4c0210c0f38242aad1a90a67c6f783c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9212, "upload_time": "2016-10-27T12:27:26", "url": "https://files.pythonhosted.org/packages/f7/87/ea20f90aab82e957251a03a90565be27857c3d2ca2292f0c344c364176c9/django-generic-m2m-0.3.1.tar.gz" } ] }