Django custom model admin получение текущего запроса в методе get_urls
Я пытаюсь реализовать на django solo вид пользовательской модели админки, где каждый пользователь имеет свой собственный объект solo для изменения. Таким образом, идентификатор объекта должен меняться, когда пользователь входит в панель администратора. Представление изменений работает нормально, но после изменения поля & save, оно не сохраняет изменения. Ниже приведен код моей пользовательской ModelAdmin -
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,
)
Итак, я пытался решить это многими способами, но ничего не помогает. Я думал, что если я смогу получить текущего пользователя или запрос в методе get_urls, это может привести к решению. Я пробовал crum libray, django-current-user, даже реализовал свой собственный middleware, но все безуспешно. Пожалуйста, помогите мне решить эту проблему или подскажите какие-нибудь обходные пути. Заранее спасибо.