Update document comments app
Add keyword arguments to the app links. Remove use of `raise_404`. Update URL parameters to use document_id and comment_id. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
||||||
from mayan.apps.common.mixins import ExternalObjectViewMixin
|
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||||
from mayan.apps.documents.models import Document
|
from mayan.apps.documents.models import Document
|
||||||
|
|
||||||
from .permissions import (
|
from .permissions import (
|
||||||
@@ -12,13 +12,13 @@ from .permissions import (
|
|||||||
from .serializers import CommentSerializer, WritableCommentSerializer
|
from .serializers import CommentSerializer, WritableCommentSerializer
|
||||||
|
|
||||||
|
|
||||||
class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
|
class APICommentListView(ExternalObjectMixin, generics.ListCreateAPIView):
|
||||||
"""
|
"""
|
||||||
get: Returns a list of all the document comments.
|
get: Returns a list of all the document comments.
|
||||||
post: Create a new document comment.
|
post: Create a new document comment.
|
||||||
"""
|
"""
|
||||||
external_object_pk_url_kwarg = 'document_pk'
|
|
||||||
external_object_class = Document
|
external_object_class = Document
|
||||||
|
external_object_pk_url_kwarg = 'document_id'
|
||||||
|
|
||||||
def get_document(self):
|
def get_document(self):
|
||||||
return self.get_external_object()
|
return self.get_external_object()
|
||||||
@@ -59,14 +59,14 @@ class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class APICommentView(ExternalObjectViewMixin, generics.RetrieveDestroyAPIView):
|
class APICommentView(ExternalObjectMixin, generics.RetrieveDestroyAPIView):
|
||||||
"""
|
"""
|
||||||
delete: Delete the selected document comment.
|
delete: Delete the selected document comment.
|
||||||
get: Returns the details of the selected document comment.
|
get: Returns the details of the selected document comment.
|
||||||
"""
|
"""
|
||||||
external_object_pk_url_kwarg = 'document_pk'
|
|
||||||
external_object_class = Document
|
external_object_class = Document
|
||||||
lookup_url_kwarg = 'comment_pk'
|
external_object_pk_url_kwarg = 'document_id'
|
||||||
|
lookup_url_kwarg = 'comment_id'
|
||||||
serializer_class = CommentSerializer
|
serializer_class = CommentSerializer
|
||||||
|
|
||||||
def get_document(self):
|
def get_document(self):
|
||||||
|
|||||||
@@ -60,18 +60,18 @@ class DocumentCommentsApp(MayanAppConfig):
|
|||||||
|
|
||||||
SourceColumn(source=Comment, label=_('Date'), attribute='submit_date')
|
SourceColumn(source=Comment, label=_('Date'), attribute='submit_date')
|
||||||
SourceColumn(
|
SourceColumn(
|
||||||
source=Comment, label=_('User'),
|
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user,
|
||||||
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user
|
label=_('User'), source=Comment
|
||||||
)
|
)
|
||||||
SourceColumn(source=Comment, label=_('Comment'), attribute='comment')
|
SourceColumn(source=Comment, label=_('Comment'), attribute='comment')
|
||||||
|
|
||||||
document_page_search.add_model_field(
|
document_page_search.add_model_field(
|
||||||
|
label=_('Comments'),
|
||||||
field='document_version__document__comments__comment',
|
field='document_version__document__comments__comment',
|
||||||
label=_('Comments')
|
|
||||||
)
|
)
|
||||||
document_search.add_model_field(
|
document_search.add_model_field(
|
||||||
field='comments__comment',
|
label=_('Comments'),
|
||||||
label=_('Comments')
|
field='comments__comment'
|
||||||
)
|
)
|
||||||
|
|
||||||
menu_sidebar.bind_links(
|
menu_sidebar.bind_links(
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from mayan.apps.events import EventTypeNamespace
|
from mayan.apps.events import EventTypeNamespace
|
||||||
|
|
||||||
namespace = EventTypeNamespace(
|
namespace = EventTypeNamespace(
|
||||||
name='document_comments', label=_('Document comments')
|
label=_('Document comments'), name='document_comments'
|
||||||
)
|
)
|
||||||
|
|
||||||
event_document_comment_created = namespace.add_event_type(
|
event_document_comment_created = namespace.add_event_type(
|
||||||
name='create', label=_('Document comment created')
|
label=_('Document comment created'), name='create'
|
||||||
)
|
)
|
||||||
event_document_comment_deleted = namespace.add_event_type(
|
event_document_comment_deleted = namespace.add_event_type(
|
||||||
name='delete', label=_('Document comment deleted')
|
label=_('Document comment deleted'), name='delete'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
from mayan.apps.appearance.classes import Icon
|
from mayan.apps.appearance.classes import Icon
|
||||||
|
|
||||||
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')
|
|
||||||
icon_comment_add = Icon(
|
icon_comment_add = Icon(
|
||||||
driver_name='fontawesome-dual', primary_symbol='comment',
|
driver_name='fontawesome-dual', primary_symbol='comment',
|
||||||
secondary_symbol='plus'
|
secondary_symbol='plus'
|
||||||
)
|
)
|
||||||
icon_comment_delete = Icon(driver_name='fontawesome', symbol='times')
|
icon_comment_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||||
|
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')
|
||||||
|
|||||||
@@ -13,17 +13,18 @@ from .permissions import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
link_comment_add = Link(
|
link_comment_add = Link(
|
||||||
args='object.pk', icon_class=icon_comment_add,
|
icon_class=icon_comment_add, kwargs={'document_id': 'object.pk'},
|
||||||
permissions=(permission_comment_create,), text=_('Add comment'),
|
permissions=(permission_comment_create,), text=_('Add comment'),
|
||||||
view='comments:comment_add',
|
view='comments:comment_add',
|
||||||
)
|
)
|
||||||
link_comment_delete = Link(
|
link_comment_delete = Link(
|
||||||
args='object.pk', icon_class=icon_comment_delete,
|
icon_class=icon_comment_delete, kwargs={'comment_id': 'object.pk'},
|
||||||
permissions=(permission_comment_delete,), tags='dangerous',
|
permissions=(permission_comment_delete,), tags='dangerous',
|
||||||
text=_('Delete'), view='comments:comment_delete',
|
text=_('Delete'), view='comments:comment_delete',
|
||||||
)
|
)
|
||||||
link_comments_for_document = Link(
|
link_comments_for_document = Link(
|
||||||
args='resolved_object.pk', icon_class=icon_comments_for_document,
|
icon_class=icon_comments_for_document,
|
||||||
|
kwargs={'document_id': 'resolved_object.pk'},
|
||||||
permissions=(permission_comment_view,), text=_('Comments'),
|
permissions=(permission_comment_view,), text=_('Comments'),
|
||||||
view='comments:comments_for_document',
|
view='comments:comments_for_document',
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ from mayan.apps.permissions import PermissionNamespace
|
|||||||
namespace = PermissionNamespace(label=_('Comments'), name='comments')
|
namespace = PermissionNamespace(label=_('Comments'), name='comments')
|
||||||
|
|
||||||
permission_comment_create = namespace.add_permission(
|
permission_comment_create = namespace.add_permission(
|
||||||
name='comment_create', label=_('Create new comments')
|
label=_('Create new comments'), name='comment_create'
|
||||||
)
|
)
|
||||||
permission_comment_delete = namespace.add_permission(
|
permission_comment_delete = namespace.add_permission(
|
||||||
name='comment_delete', label=_('Delete comments')
|
label=_('Delete comments'), name='comment_delete'
|
||||||
)
|
)
|
||||||
permission_comment_view = namespace.add_permission(
|
permission_comment_view = namespace.add_permission(
|
||||||
name='comment_view', label=_('View comments')
|
label=_('View comments'), name='comment_view'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ class CommentSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
def get_document_comments_url(self, instance):
|
def get_document_comments_url(self, instance):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='rest_api:comment-list', kwargs={
|
viewname='rest_api:comment-list', kwargs={
|
||||||
'document_pk': instance.document.pk,
|
'document_id': instance.document.pk,
|
||||||
}, request=self.context['request'], format=self.context['format']
|
}, request=self.context['request'], format=self.context['format']
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_url(self, instance):
|
def get_url(self, instance):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='rest_api:comment-detail', kwargs={
|
viewname='rest_api:comment-detail', kwargs={
|
||||||
'document_pk': instance.document.pk, 'comment_pk': instance.pk
|
'document_id': instance.document.pk, 'comment_pk': instance.pk
|
||||||
}, request=self.context['request'], format=self.context['format']
|
}, request=self.context['request'], format=self.context['format']
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -59,13 +59,13 @@ class WritableCommentSerializer(serializers.ModelSerializer):
|
|||||||
def get_document_comments_url(self, instance):
|
def get_document_comments_url(self, instance):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='rest_api:comment-list', kwargs={
|
viewname='rest_api:comment-list', kwargs={
|
||||||
'document_pk': instance.document.pk
|
'document_id': instance.document.pk
|
||||||
}, request=self.context['request'], format=self.context['format']
|
}, request=self.context['request'], format=self.context['format']
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_url(self, instance):
|
def get_url(self, instance):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='rest_api:comment-detail', kwargs={
|
viewname='rest_api:comment-detail', kwargs={
|
||||||
'document_pk': instance.document.pk, 'comment_pk': instance.pk
|
'document_id': instance.document.pk, 'comment_id': instance.pk
|
||||||
}, request=self.context['request'], format=self.context['format']
|
}, request=self.context['request'], format=self.context['format']
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ class CommentsTestMixin(object):
|
|||||||
def _create_comment(self, user=None):
|
def _create_comment(self, user=None):
|
||||||
self.test_comment = self.document.comments.create(
|
self.test_comment = self.document.comments.create(
|
||||||
comment=TEST_COMMENT_TEXT,
|
comment=TEST_COMMENT_TEXT,
|
||||||
user=user or self.user or self.admin_user
|
user=user or self._test_case_user or self.admin_user
|
||||||
)
|
)
|
||||||
|
|
||||||
def _request_document_comment_add_view(self):
|
def _request_document_comment_add_view(self):
|
||||||
response = self.post(
|
response = self.post(
|
||||||
viewname='comments:comment_add',
|
viewname='comments:comment_add',
|
||||||
kwargs={'document_pk': self.document.pk},
|
kwargs={'document_id': self.document.pk},
|
||||||
data={'comment': TEST_COMMENT_TEXT}
|
data={'comment': TEST_COMMENT_TEXT}
|
||||||
)
|
)
|
||||||
self.test_comment = Comment.objects.filter(
|
self.test_comment = Comment.objects.filter(
|
||||||
@@ -27,5 +27,5 @@ class CommentsTestMixin(object):
|
|||||||
def _request_document_comment_delete_view(self):
|
def _request_document_comment_delete_view(self):
|
||||||
return self.post(
|
return self.post(
|
||||||
viewname='comments:comment_delete',
|
viewname='comments:comment_delete',
|
||||||
kwargs={'comment_pk': self.test_comment.pk},
|
kwargs={'comment_id': self.test_comment.pk},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,10 +16,6 @@ from .mixins import CommentsTestMixin
|
|||||||
|
|
||||||
|
|
||||||
class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
|
class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
|
||||||
def setUp(self):
|
|
||||||
super(CommentAPITestCase, self).setUp()
|
|
||||||
self.login_user()
|
|
||||||
|
|
||||||
def _request_api_comment_create_view(self):
|
def _request_api_comment_create_view(self):
|
||||||
return self.post(
|
return self.post(
|
||||||
viewname='rest_api:comment-list',
|
viewname='rest_api:comment-list',
|
||||||
|
|||||||
@@ -13,10 +13,6 @@ from .mixins import CommentsTestMixin
|
|||||||
|
|
||||||
|
|
||||||
class CommentEventsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
class CommentEventsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||||
def setUp(self):
|
|
||||||
super(CommentEventsTestCase, self).setUp()
|
|
||||||
self.login_user()
|
|
||||||
|
|
||||||
def test_comment_created_event_no_permissions(self):
|
def test_comment_created_event_no_permissions(self):
|
||||||
Action.objects.all().delete()
|
Action.objects.all().delete()
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,6 @@ from .mixins import CommentsTestMixin
|
|||||||
|
|
||||||
|
|
||||||
class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||||
def setUp(self):
|
|
||||||
super(CommentsViewsTestCase, self).setUp()
|
|
||||||
self.login_user()
|
|
||||||
|
|
||||||
def test_document_comment_add_view_no_permission(self):
|
def test_document_comment_add_view_no_permission(self):
|
||||||
response = self._request_document_comment_add_view()
|
response = self._request_document_comment_add_view()
|
||||||
self.assertEqual(response.status_code, 404)
|
self.assertEqual(response.status_code, 404)
|
||||||
@@ -31,7 +27,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
|||||||
|
|
||||||
def _create_test_comment(self):
|
def _create_test_comment(self):
|
||||||
self.test_comment = self.document.comments.create(
|
self.test_comment = self.document.comments.create(
|
||||||
user=self.user, comment=TEST_COMMENT_TEXT
|
user=self._test_case_user, comment=TEST_COMMENT_TEXT
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_document_comment_delete_view_no_permission(self):
|
def test_document_comment_delete_view_no_permission(self):
|
||||||
@@ -54,7 +50,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
|||||||
def _request_document_comment_list_view(self):
|
def _request_document_comment_list_view(self):
|
||||||
return self.get(
|
return self.get(
|
||||||
viewname='comments:comments_for_document',
|
viewname='comments:comments_for_document',
|
||||||
kwargs={'document_pk': self.document.pk}
|
kwargs={'document_id': self.document.pk}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_document_comment_list_view_no_permissions(self):
|
def test_document_comment_list_view_no_permissions(self):
|
||||||
|
|||||||
@@ -10,26 +10,26 @@ from .views import (
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(
|
url(
|
||||||
regex=r'^comments/(?P<comment_pk>\d+)/delete/$', name='comment_delete',
|
regex=r'^comments/(?P<comment_id>\d+)/delete/$', name='comment_delete',
|
||||||
view=DocumentCommentDeleteView.as_view()
|
view=DocumentCommentDeleteView.as_view()
|
||||||
),
|
),
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<document_pk>\d+)/comments/add/$',
|
regex=r'^documents/(?P<document_id>\d+)/comments/$',
|
||||||
name='comment_add', view=DocumentCommentCreateView.as_view()
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^documents/(?P<document_pk>\d+)/comments/$',
|
|
||||||
name='comments_for_document', view=DocumentCommentListView.as_view()
|
name='comments_for_document', view=DocumentCommentListView.as_view()
|
||||||
),
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^documents/(?P<document_id>\d+)/comments/add/$',
|
||||||
|
name='comment_add', view=DocumentCommentCreateView.as_view()
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
api_urls = [
|
api_urls = [
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/$',
|
regex=r'^documents/(?P<document_id>\d+)/comments/$',
|
||||||
name='comment-list', view=APICommentListView.as_view()
|
name='comment-list', view=APICommentListView.as_view()
|
||||||
),
|
),
|
||||||
url(
|
url(
|
||||||
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/(?P<comment_pk>[0-9]+)/$',
|
regex=r'^documents/(?P<document_id>\d+)/comments/(?P<comment_id>\d+)/$',
|
||||||
name='comment-detail', view=APICommentView.as_view()
|
name='comment-detail', view=APICommentView.as_view()
|
||||||
),
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from mayan.apps.common.generics import (
|
from mayan.apps.common.generics import (
|
||||||
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView
|
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView
|
||||||
)
|
)
|
||||||
from mayan.apps.common.mixins import ExternalObjectViewMixin
|
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||||
from mayan.apps.documents.models import Document
|
from mayan.apps.documents.models import Document
|
||||||
|
|
||||||
from .icons import icon_comments_for_document
|
from .icons import icon_comments_for_document
|
||||||
@@ -19,11 +19,11 @@ from .permissions import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView):
|
class DocumentCommentCreateView(ExternalObjectMixin, SingleObjectCreateView):
|
||||||
fields = ('comment',)
|
|
||||||
external_object_pk_url_kwarg = 'document_pk'
|
|
||||||
external_object_class = Document
|
external_object_class = Document
|
||||||
external_object_permission = permission_comment_create
|
external_object_permission = permission_comment_create
|
||||||
|
external_object_pk_url_kwarg = 'document_id'
|
||||||
|
fields = ('comment',)
|
||||||
model = Comment
|
model = Comment
|
||||||
|
|
||||||
def get_document(self):
|
def get_document(self):
|
||||||
@@ -43,7 +43,7 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
|
|||||||
def get_post_action_redirect(self):
|
def get_post_action_redirect(self):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='comments:comments_for_document', kwargs={
|
viewname='comments:comments_for_document', kwargs={
|
||||||
'document_pk': self.kwargs['document_pk']
|
'document_id': self.kwargs['document_id']
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -55,9 +55,8 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
|
|||||||
|
|
||||||
class DocumentCommentDeleteView(SingleObjectDeleteView):
|
class DocumentCommentDeleteView(SingleObjectDeleteView):
|
||||||
model = Comment
|
model = Comment
|
||||||
pk_url_kwarg = 'comment_pk'
|
pk_url_kwarg = 'comment_id'
|
||||||
object_permission = permission_comment_delete
|
object_permission = permission_comment_delete
|
||||||
object_permission_raise_404 = True
|
|
||||||
|
|
||||||
def get_delete_extra_data(self):
|
def get_delete_extra_data(self):
|
||||||
return {'_user': self.request.user}
|
return {'_user': self.request.user}
|
||||||
@@ -71,15 +70,15 @@ class DocumentCommentDeleteView(SingleObjectDeleteView):
|
|||||||
def get_post_action_redirect(self):
|
def get_post_action_redirect(self):
|
||||||
return reverse(
|
return reverse(
|
||||||
viewname='comments:comments_for_document', kwargs={
|
viewname='comments:comments_for_document', kwargs={
|
||||||
'document_pk': self.get_object().document.pk
|
'document_id': self.get_object().document.pk
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DocumentCommentListView(ExternalObjectViewMixin, SingleObjectListView):
|
class DocumentCommentListView(ExternalObjectMixin, SingleObjectListView):
|
||||||
external_object_pk_url_kwarg = 'document_pk'
|
|
||||||
external_object_class = Document
|
external_object_class = Document
|
||||||
external_object_permission = permission_comment_view
|
external_object_permission = permission_comment_view
|
||||||
|
external_object_pk_url_kwarg = 'document_id'
|
||||||
|
|
||||||
def get_document(self):
|
def get_document(self):
|
||||||
return self.get_external_object()
|
return self.get_external_object()
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ class MailDocumentView(MultipleObjectFormActionView):
|
|||||||
form_class = DocumentMailForm
|
form_class = DocumentMailForm
|
||||||
model = Document
|
model = Document
|
||||||
object_permission = permission_mailing_send_document
|
object_permission = permission_mailing_send_document
|
||||||
object_permission_raise_404 = True
|
|
||||||
pk_url_kwarg = 'document_pk'
|
pk_url_kwarg = 'document_pk'
|
||||||
success_message = _('%(count)d document queued for email delivery')
|
success_message = _('%(count)d document queued for email delivery')
|
||||||
success_message_plural = _(
|
success_message_plural = _(
|
||||||
@@ -173,7 +172,6 @@ class UserMailingCreateView(SingleObjectDynamicFormCreateView):
|
|||||||
class UserMailingDeleteView(SingleObjectDeleteView):
|
class UserMailingDeleteView(SingleObjectDeleteView):
|
||||||
model = UserMailer
|
model = UserMailer
|
||||||
object_permission = permission_user_mailer_delete
|
object_permission = permission_user_mailer_delete
|
||||||
object_permission_raise_404 = True
|
|
||||||
pk_url_kwarg = 'mailer_pk'
|
pk_url_kwarg = 'mailer_pk'
|
||||||
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
|
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
|
||||||
|
|
||||||
@@ -187,7 +185,6 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
|
|||||||
form_class = UserMailerDynamicForm
|
form_class = UserMailerDynamicForm
|
||||||
model = UserMailer
|
model = UserMailer
|
||||||
object_permission = permission_user_mailer_edit
|
object_permission = permission_user_mailer_edit
|
||||||
object_permission_raise_404 = True
|
|
||||||
pk_url_kwarg = 'mailer_pk'
|
pk_url_kwarg = 'mailer_pk'
|
||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user