|
|
@ -8,16 +8,19 @@ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, |
|
|
|
|
|
|
|
from crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display |
|
|
|
|
|
|
|
LIST, CREATE, DETAIL, UPDATE, DELETE = \ |
|
|
|
'list', 'create', 'detail', 'update', 'delete' |
|
|
|
|
|
|
|
|
|
|
|
def _form_invalid_message(msg): |
|
|
|
return '%s %s' % (_('Formulário inválido.'), msg) |
|
|
|
|
|
|
|
FORM_MESSAGES = {'create': (_('Registro criado com sucesso!'), |
|
|
|
_('O registro não foi criado.')), |
|
|
|
'update': (_('Registro alterado com sucesso!'), |
|
|
|
_('Suas alterações não foram salvas.')), |
|
|
|
'delete': (_('Registro excluído com sucesso!'), |
|
|
|
_('O registro não foi excluído.'))} |
|
|
|
FORM_MESSAGES = {CREATE: (_('Registro criado com sucesso!'), |
|
|
|
_('O registro não foi criado.')), |
|
|
|
UPDATE: (_('Registro alterado com sucesso!'), |
|
|
|
_('Suas alterações não foram salvas.')), |
|
|
|
DELETE: (_('Registro excluído com sucesso!'), |
|
|
|
_('O registro não foi excluído.'))} |
|
|
|
FORM_MESSAGES = {k: (a, _form_invalid_message(b)) |
|
|
|
for k, (a, b) in FORM_MESSAGES.items()} |
|
|
|
|
|
|
@ -55,32 +58,32 @@ def make_pagination(index, num_pages): |
|
|
|
|
|
|
|
class BaseMixin(CrispyLayoutFormMixin): |
|
|
|
|
|
|
|
@property |
|
|
|
def namespace(self): |
|
|
|
return self.model._meta.model_name |
|
|
|
@classmethod |
|
|
|
def url_name(cls, suffix): |
|
|
|
return '%s_%s' % (cls.model._meta.model_name, suffix) |
|
|
|
|
|
|
|
def resolve_url(self, url_name, args=None): |
|
|
|
return reverse('%s:%s' % (self.namespace, url_name), args=args) |
|
|
|
def resolve_url(self, suffix, args=None): |
|
|
|
return reverse(self.url_name(suffix), args=args) |
|
|
|
|
|
|
|
@property |
|
|
|
def list_url(self): |
|
|
|
return self.resolve_url('list') |
|
|
|
return self.resolve_url(LIST) |
|
|
|
|
|
|
|
@property |
|
|
|
def create_url(self): |
|
|
|
return self.resolve_url('create') |
|
|
|
return self.resolve_url(CREATE) |
|
|
|
|
|
|
|
@property |
|
|
|
def detail_url(self): |
|
|
|
return self.resolve_url('detail', args=(self.object.id,)) |
|
|
|
return self.resolve_url(DETAIL, args=(self.object.id,)) |
|
|
|
|
|
|
|
@property |
|
|
|
def update_url(self): |
|
|
|
return self.resolve_url('update', args=(self.object.id,)) |
|
|
|
return self.resolve_url(UPDATE, args=(self.object.id,)) |
|
|
|
|
|
|
|
@property |
|
|
|
def delete_url(self): |
|
|
|
return self.resolve_url('delete', args=(self.object.id,)) |
|
|
|
return self.resolve_url(DELETE, args=(self.object.id,)) |
|
|
|
|
|
|
|
def get_template_names(self): |
|
|
|
names = super(BaseMixin, self).get_template_names() |
|
|
@ -131,7 +134,7 @@ class CrudListView(ListView): |
|
|
|
|
|
|
|
class CrudCreateView(FormMessagesMixin, CreateView): |
|
|
|
|
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES['create'] |
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES[CREATE] |
|
|
|
|
|
|
|
@property |
|
|
|
def cancel_url(self): |
|
|
@ -148,7 +151,7 @@ class CrudCreateView(FormMessagesMixin, CreateView): |
|
|
|
|
|
|
|
class CrudUpdateView(FormMessagesMixin, UpdateView): |
|
|
|
|
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES['update'] |
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES[UPDATE] |
|
|
|
|
|
|
|
@property |
|
|
|
def cancel_url(self): |
|
|
@ -160,7 +163,7 @@ class CrudUpdateView(FormMessagesMixin, UpdateView): |
|
|
|
|
|
|
|
class CrudDeleteView(FormMessagesMixin, DeleteView): |
|
|
|
|
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES['delete'] |
|
|
|
form_valid_message, form_invalid_message = FORM_MESSAGES[DELETE] |
|
|
|
|
|
|
|
@property |
|
|
|
def cancel_url(self): |
|
|
@ -195,17 +198,13 @@ class Crud: |
|
|
|
CrudUpdateView = _add_base(cls.UpdateView) |
|
|
|
CrudDeleteView = _add_base(cls.DeleteView) |
|
|
|
|
|
|
|
urlpatterns = [ |
|
|
|
url(r'^$', CrudListView.as_view(), name='list'), |
|
|
|
url(r'^create$', CrudCreateView.as_view(), name='create'), |
|
|
|
url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'), |
|
|
|
url(r'^(?P<pk>\d+)/edit$', |
|
|
|
CrudUpdateView.as_view(), name='update'), |
|
|
|
url(r'^(?P<pk>\d+)/delete$', |
|
|
|
CrudDeleteView.as_view(), name='delete'), |
|
|
|
] |
|
|
|
|
|
|
|
return urlpatterns, _add_base(object)().namespace |
|
|
|
return [url(regex, view.as_view(), name=view.url_name(suffix)) |
|
|
|
for regex, view, suffix in [ |
|
|
|
(r'^$', CrudListView, LIST), |
|
|
|
(r'^create$', CrudCreateView, CREATE), |
|
|
|
(r'^(?P<pk>\d+)$', CrudDetailView, DETAIL), |
|
|
|
(r'^(?P<pk>\d+)/edit$', CrudUpdateView, UPDATE), |
|
|
|
(r'^(?P<pk>\d+)/delete$', CrudDeleteView, DELETE), ]] |
|
|
|
|
|
|
|
@classonlymethod |
|
|
|
def build(cls, _model, _help_path): |
|
|
|