I am trying to implement a django solo kind of custom model admin where each user has his own solo object to change. So the instance id should change when user logs in admin panel. Change view is working fine but after changing the field & save, it is not saving the changes. Below is my custom ModelAdmin code -
class DatabaseSessionModelAdmin(admin.ModelAdmin):
form = DatabaseSessionForm
def get_queryset(self, request):
return self.model.objects.filter(user=request.user)
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def get_urls(self):
urls = super(DatabaseSessionModelAdmin, self).get_urls()
if not settings.DB_ADMIN_SKIP_OBJECT_LIST_PAGE:
return urls
try:
model_name = self.model._meta.model_name
except AttributeError:
model_name = self.model._meta.module_name.lower()
self.model._meta.verbose_name_plural = self.model._meta.verbose_name
url_name_prefix = '%(app_name)s_%(model_name)s' % {
'app_name': self.model._meta.app_label,
'model_name': model_name,
}
custom_urls = [
re_path(r'^$',
self.admin_site.admin_view(self.change_view),
# {'object_id': str(self.singleton_instance_id)},
name='%s_change' % url_name_prefix),
]
return custom_urls + urls
def response_change(self, request, obj):
msg = _('%(obj)s was changed successfully.') % {
'obj': force_str(obj)}
if '_continue' in request.POST:
self.message_user(request, msg + ' ' +
_('You may edit it again below.'))
return HttpResponseRedirect(request.path)
else:
self.message_user(request, msg)
return HttpResponseRedirect("../../")
def change_view(self, request, object_id=None, form_url=None, extra_context=None):
object_id = DatabaseSession.objects.filter(user=request.user).first().id
if not extra_context:
extra_context = dict()
extra_context['skip_object_list_page'] = True
return super(DatabaseSessionModelAdmin, self).change_view(
request,
str(object_id),
form_url=form_url,
extra_context=extra_context,
)
def history_view(self, request, object_id, extra_context=None):
object_id = DatabaseSession.objects.filter(user=request.user).first().id
if not extra_context:
extra_context = dict()
extra_context['skip_object_list_page'] = settings.DB_ADMIN_SKIP_OBJECT_LIST_PAGE
return super(DatabaseSessionModelAdmin, self).history_view(
request,
str(object_id),
extra_context=extra_context,
)
So, I tried to solve this in many ways, but nothing's working. In my thoughts, if I can get the current user or request in get_urls method, that might lead to a solution. I tried crum libray, django-current-user, even implemented my own middleware, but all failed. Please help me resolve this or suggest me any workarounds please. Thanks in advance.