diff --git a/Pipfile b/Pipfile
index a391162f..50130075 100644
--- a/Pipfile
+++ b/Pipfile
@@ -5,7 +5,7 @@ url = "https://pypi.python.org/simple"
[packages]
boto3 = "*"
dj-database-url = "*"
-django = "==3.*"
+django = "==4.*"
django-axes = "*"
django-filter = "*"
django-imagekit = "*"
diff --git a/babybuddy/templates/babybuddy/user_confirm_delete.html b/babybuddy/templates/babybuddy/user_confirm_delete.html
index 94902af5..e1447dcc 100644
--- a/babybuddy/templates/babybuddy/user_confirm_delete.html
+++ b/babybuddy/templates/babybuddy/user_confirm_delete.html
@@ -15,7 +15,7 @@
{% blocktrans trimmed %}
Are you sure you want to delete {{ object }}?
{% endblocktrans %}
-
+
{% trans "Cancel" %}
{% endblock %}
\ No newline at end of file
diff --git a/babybuddy/views.py b/babybuddy/views.py
index ec7bf7c0..c52c8215 100644
--- a/babybuddy/views.py
+++ b/babybuddy/views.py
@@ -89,18 +89,16 @@ class UserUpdate(StaffOnlyMixin, PermissionRequiredMixin,
class UserDelete(StaffOnlyMixin, PermissionRequiredMixin,
- DeleteView):
+ DeleteView, SuccessMessageMixin):
model = User
template_name = 'babybuddy/user_confirm_delete.html'
permission_required = ('admin.delete_user',)
success_url = reverse_lazy('babybuddy:user-list')
- def delete(self, request, *args, **kwargs):
- success_message = format_lazy(gettext_lazy(
+ def get_success_message(self, cleaned_data):
+ return format_lazy(gettext_lazy(
'User {user} deleted.'), user=self.get_object()
)
- messages.success(request, success_message)
- return super(UserDelete, self).delete(request, *args, **kwargs)
class UserPassword(LoginRequiredMixin, View):
diff --git a/core/views.py b/core/views.py
index 5db65dbe..ff4b688e 100644
--- a/core/views.py
+++ b/core/views.py
@@ -66,17 +66,11 @@ class CoreUpdateView(PermissionRequiredMixin, SuccessMessageMixin,
return self.success_message % cleaned_data
-class CoreDeleteView(PermissionRequiredMixin, DeleteView):
- """
- SuccessMessageMixin is not compatible DeleteView.
- See: https://code.djangoproject.com/ticket/21936
- """
- def delete(self, request, *args, **kwargs):
- success_message = _('%(model)s entry deleted.') % {
+class CoreDeleteView(PermissionRequiredMixin, SuccessMessageMixin, DeleteView):
+ def get_success_message(self, cleaned_data):
+ return _('%(model)s entry deleted.') % {
'model': self.model._meta.verbose_name.title()
}
- messages.success(request, success_message)
- return super(CoreDeleteView, self).delete(request, *args, **kwargs)
class ChildList(PermissionRequiredMixin, BabyBuddyFilterView):
diff --git a/requirements.txt b/requirements.txt
index f0cd2e26..4271c0da 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,7 +20,7 @@ django-import-export==2.7.1
django-ipware==4.0.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
django-storages==1.12.3
django-widget-tweaks==1.4.12
-django==3.2.11
+django==4.0.1
djangorestframework==3.13.1
et-xmlfile==1.1.0; python_version >= '3.6'
faker==11.3.0