django-inline-actions icon indicating copy to clipboard operation
django-inline-actions copied to clipboard

AttributeError: object has no attribute '_request'

Open lexicalunit opened this issue 3 years ago • 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: https://github.com/escaped/django-inline-actions/blob/d02441339a1b5ec3d34c10a29da41157afe9df2c/inline_actions/admin.py#L81

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

lexicalunit avatar Sep 28 '22 17:09 lexicalunit

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

adinhodovic avatar Apr 12 '23 14:04 adinhodovic

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.

tvanesse avatar May 09 '23 15:05 tvanesse