Создание формы с определенными changed_data в django для целей тестирования

Я переопределил ModelAdmin.save_model для того, чтобы запускать задачу, если определенное поле было изменено. В основном что-то вроде:

def save_model(self, request, obj, form, change):
    obj.save()
    if "field_name" in form:
        transaction.on_commit(lambda: trigger_task())

Теперь я пытаюсь написать модульный тест, который проверяет, сработает ли эта задача в ответ на изменение поля. Только мне трудно создать форму, в которой changed_data будет содержаться это поле.

В настоящее время мой тест выглядит следующим образом:

@patch(...)
def test_task_should_trigger_if_field_changed(self, mocked_task):
    admin = MyAdmin(model=MyModel, admin_site=AdminSite())
    form = MyForm({"field_name": "changed"}, initial={"field_name": "initial"})
    ...
    admin.save_model(request=MagicMock(), obj=my_model, form=form, change=False)

Приведенный выше тест не создаст form, чей changed_data содержит field_name, и задача никогда не будет запущена. На данный момент я подумываю о создании насмешливого объекта, который будет возвращать знаменитый form.changed_data["field_name"], но мне интересно, может я что-то упускаю или есть более простой способ сделать это.

EDIT: Я тестирую кое-что другое в этом тесте, но в настоящее время это блокирует, пока я не высмею это.

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