A CRUD framework that uses HTML popups for CRUD operations.
Project description
A CRUD framework leveraging Django’s generic views that implements CRUD operations through HTML popups.
Requirements
Python 2.7, 3.4
Django >= 1.9
Documentation
Available at django-popupcrud.readthedocs.io.
Quickstart
Install django-popupcrud using pip:
pip install django-popucrud
Or install it directly from the source repository:
pip intall git+https://github.com/harikvpy/django-popupcrud.git
Yet another way would be to clone this repository and install from the cloned root folder via pip install -e ..
Install the dependencies - django-bootstrap3 and django-pure-pagination. Add the dependencies and popupcrud to INSTALLED_APPS in your project’s settings.py:
INSTALLED_APPS = [ ... 'bootstrap3', 'pure_pagination', 'popupcrud', ... ]
Let PopupCrudViewSet know of your base template file name. This defaults to base.html, but if your project uses a different base template filename, inform PopupCrudViewSet about it in settings.py:
POPUPCRUD = { 'base_template': 'mybase.html', }
Include Bootstrap CSS & JS resources in this base template. If you were to use django-bootstrap3 tags for these, your base template should look something like this:
<head> {% bootstrap_css %} <script src="{% bootstrap_jquery_url %}" type="text/javascript" charset="utf-8"></script> {% bootstrap_javascript %} {% block extrahead %}{% endblock extrahead %} </head>
Also, define a block named extrahead within the <head> element. PopupCrudViewSet views use a few custom CSS styles to show column sorting options and sort priority. These styles are defined in static/popupcrud/css/popupcrud.css which is inserted into the extrahead block. If you don’t declare this block, you will have to explicitly load the stylesheet into your base template.
In your app’s views.py, create a ViewSet for each model for which you want to support CRUD operations.
Models.py:
from django.db import models class Author(models.Model): name = models.CharField("Name", max_length=128) penname = models.CharField("Pen Name", max_length=128) age = models.SmallIntegerField("Age", null=True, blank=True) class Meta: ordering = ('name',) verbose_name = "Author" verbose_name_plural = "Authors" def __str__(self): return self.name
Views.py:
from popupcrud.views import PopupCrudViewSet class AuthorViewSet(PopupCrudViewSet): model = Author fields = ('name', 'penname', 'age') list_display = ('name', 'penname', 'age') list_url = reverse_lazy("library:authors") new_url = reverse_lazy("library:new-author") def get_edit_url(self, obj): return reverse_lazy("library:edit-author", kwargs={'pk': obj.pk}) def get_delete_url(self, obj): return reverse_lazy("library:delete-author", kwargs={'pk': obj.pk})
Wire up the individual CRUD views generated by the viewset to the URL namespace:
urlpatterns= [ url(r'^authors/$', views.AuthorCrudViewset.list(), name='authors'), url(r'^authors/new/$', views.AuthorCrudViewset.create(), name='new-author'), url(r'^authors(?P<pk>\d+)/edit/$', views.AuthorCrudViewset.update(), name='edit-author'), url(r'^authors(?P<pk>\d+)/delete/$', views.AuthorCrudViewset.delete(), name='delete-author'), ]
Thats it! Your modern HTML popup based CRUD for your table is up and running.
PopupCrudViewSet has many options to customize the fields displayed in list view, form used for create/update operations, permission control and more. Refer to the Reference and How-to sections of the documentation for more details.
License
Distributed under BSD 3-Clause License. See LICENSE file for details.
History
0.1.0 (2017-09-25)
Initial release
0.1.2 (2017-09-26)
Merge Quickstart section into README
0.1.3 (2017-09-26)
Add missing HISTORY.rst to manifst
0.1.4 (2017-09-26)
Support for order_field attribute for list_display method fields. This works similar to ModelAdmin method fields’ admin_order_field property.
0.1.5 (2017-09-26)
Better unicode support
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.