Может ли APIRequestFactory создать запрос с данными и атрибутами пользователя

Я пытаюсь сделать модульный тест для функции, которая принимает объект django Request в качестве параметра; объект Request является одним из параметров метода представления, основанного на классе Django.

Из параметра объекта запроса предполагается наличие атрибута data и user.

Моя проблема в том, что я не могу реплицировать объект запроса, используя APIRequestFactory от DRF. Когда я использую пакет python requests и делаю что-то вроде

headers = {
    'Authorization': "Token {}".format(settings.AUTH_TOKEN),
    'Accept': 'application/json',
    'Content-Type': 'application/json',
}

data['foo'] = foo_id

response = requests.post(
    '{}/api/foo/{}/action/'.format(settings.ROOT_URL, foo_id),
    headers=headers,
    json=data)

Тогда пользователь и атрибут data существуют в объекте запроса представления, основанного на классе.

Однако, если я использую DRF's APIRequestFactory и делаю

data = {"foo_id": 1234}

factory = APIRequestFactory()
request = factory.post('/api/foo/1/action/', data, format="json")

... тогда я должен явно добавить

request.user = user
request.data = data

Только атрибут body как данные, и то как байтовый поток, например, body: b'{"foo_id": "1234"}'

Возможно ли то, что я пытаюсь сделать?

В качестве отступления, возможно, я нарушаю закон Деметры, и моя тестируемая функция должна принимать в качестве параметров dict и объект пользователя, а не весь объект запроса, но это кажется излишним, учитывая ее вызывающих. В любом случае, было бы неплохо узнать, можно ли сделать APIRequestFactory таким, чтобы он заполнял атрибуты user и data без их явного назначения.

Вернуться на верх