escaped/django-inline-actions

AttributeError: object has no attribute '_request'

lexicalunit opened this issue · 2 comments

Using the example for testing results in an exception at runtime.

import pytest
from django.contrib.admin import AdminSite

from yourapp.module.admin import MyAdmin


@pytest.fixture
def admin_site():
    return AdminSite()

@pytest.mark.django_db
def test_action_XXX(admin_site):
    """Test action XXX"""
    fake_request = {}  # you might need to use a RequestFactory here
    obj = ...  # create an instance

    admin = MyAdmin(obj, admin_site)

    admin.render_inline_actions(article)
    response = admin.action_XXX(fake_request, obj)
    # assert the state of the application

This will fail on the line admin.render_inline_actions(article) because this code is invalid:

for action_name in self.get_inline_actions(self._request, obj):

At this point in the code the HTTP Request has not been given to the Admin object, so this attribute does not exist.

I hit the same issue when using "fieldsets" instead of "fields" in the inline, buttons don't render since _request is None

Depending on what you are trying to achieve, you might just assign a dummy request (admin._request = {}) before calling render_inline_actions. It works for me.