{ "info": { "author": "Yin KangHong", "author_email": "614457662@qq.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries" ], "description": "## django-popup-field\nA popup field for django which can create\u9286\u4e7dpdate\u9286\u4e68elete `ForeignKey` and `ManyToManyField` instance by popup windows.\n\n### Requirements\n- Python3\n- Django\n\n### Demo\n\nYou can get this demo at [popup.yinkh.top](http://popup.yinkh.top)\n\n\n\n### TODO\n- internationalization\n- optimize action in form\n- css override\n\n### QuickStart\n\n1. Install `django-popup-field` with pip:\n\n pip install django-popup-field\n\n2. Install the dependencies `django-popup-field` to `INSTALLED_APPS` in your project's `settings.py`:\n\n INSTALLED_APPS = [\n ...\n 'popup_field',\n ...\n ]\n3. Assume I have a post app which `models.py` is:\n\n\t class Category(models.Model):\n\t name = models.CharField(max_length=255, verbose_name='name')\n\n\t ...\n\n\n\t class Tag(models.Model):\n\t name = models.CharField(max_length=255, verbose_name='name')\n\n\t ...\n\n\n\t class Post(models.Model):\n\t title = models.CharField(max_length=255, verbose_name='title')\n\t category = models.ForeignKey('post.Category', related_name='post_category', on_delete=models.CASCADE,\n\t verbose_name='category')\n\t tags = models.ManyToManyField('post.Tag',\n\t verbose_name='tags')\n\t ...\n\n\tNew `popups.py` in post app,the content is:\n\n\t from popup_field.views import PopupCRUDViewSet\n\n\t from .models import *\n\n\n\t class CategoryForm(forms.ModelForm):\n\t\t class Meta:\n\t\t model = Category\n\t\t fields = ['name']\n\n\n\t class TagForm(forms.ModelForm):\n\t\t class Meta:\n\t\t model = Tag\n\t\t fields = ['name']\n\n\n\t class CategoryPopupCRUDViewSet(PopupCRUDViewSet):\n\t\t model = Category\n\t\t form_class = CategoryForm\n\t\t template_name_create = 'popup/create.html'\n\t\t template_name_update = 'popup/update.html'\n\n\t class TagPopupCRUDViewSet(PopupCRUDViewSet):\n\t\t model = Tag\n\t\t form_class = TagForm\n\t\t template_name_create = 'popup/create.html'\n\t\t template_name_update = 'popup/update.html'\n\n\n4. Change widget for category and tag used in `forms.py`:\n\n from django import forms\n\t from .popups import CategoryPopupCRUDViewSet, TagPopupCRUDViewSet\n\n\t from .models import *\n\n\n\t class PostForm(forms.ModelForm):\n\n\t\t class Meta:\n\t\t\t model = Post\n\t\t\t fields = ['title', 'category', 'tags']\n\t\t\t widgets = {\n\t\t\t\t 'category': CategoryPopupCRUDViewSet.get_fk_popup_field(),\n\t\t\t\t 'tags': TagPopupCRUDViewSet.get_m2m_popup_field(),\n\t\t\t }\n\n5. Custom your popup template, `popup/create.html`:\n\n {% extends \"popup/base.html\" %}\n {% block css %}\n {% endblock %}\n\n {% block js %}\n {% endblock %}\n\n {% block main %}\n