Как присвоить новое значение полю ModelForm, форма которого редактирует данные пользователя, чтобы проверить, будут ли отредактированы данные Django test TestCase

Я тестирую работу с формами Django и пытаюсь протестировать ModelForm, которая редактирует данные пользователя. Я пытался написать тест несколькими способами, но каждый из них выдает разные ошибки. И все ошибки связаны с данными, которые я пытаюсь присвоить форме. Я создаю пользователя и профиль, потому что в моем приложении модель пользователя расширена, и пытаюсь изменить profile.first_name с 'Test' на 'Edited'.

Это тест:

 class ProfileEditFormTests(TestCase):
  

def test_if_form__can_change_passed_data__expect_success(self):
    """
       Test ProfileEditForm if can edit a valid data:
        -Change profile.first_name from 'Test' to 'Edited'
    """
    user, profile = self.__create_valid_user_and_profile()
    form_data = {
        'first_name': profile.first_name,
        'last_name': profile.last_name,
        'image': profile.image,
        'description': profile.description,
        'phone_number': profile.phone_number,
        'email': profile.email,
    }
    updated_form_data = {
        'first_name': 'Edited',
    }
    form = ProfileEditForm(data=updated_form_data, instance=profile)
    # Error:
    #  self.assertTrue(form.is_valid())
    # AssertionError: False is not true
    # on debug, the form have only data.first_name = 'Edited'
    # and the another fields are empty

    self.assertTrue(form.is_valid())
    form.save()
    self.assertEqual(updated_form_data['first_name'], profile.first_name)

Вот ошибка, которая возникает, когда я пытаюсь присвоить form_data экземпляру формы.

 form = ProfileEditForm(data=updated_form_data, instance=form_data)
    # Error
    # Traceback (most recent call last):
    # object_data = model_to_dict(instance, opts.fields, opts.exclude)
    #  opts = instance._meta
    # AttributeError: 'dict' object has no attribute '_meta'

Вышеуказанная ошибка возникает также, когда я пытаюсь изменить form.data.first_name следующим образом.

form = ProfileEditForm(instance=form_data)
    form.data.first_name = updated_form_data['first_name']
    # Error
    # Traceback (most recent call last):
    # object_data = model_to_dict(instance, opts.fields, opts.exclude)
    #  opts = instance._meta
    # AttributeError: 'dict' object has no attribute '_meta'

Любая помощь будет оценена по достоинству! Заранее спасибо!

Обновление: После долгих поисков я нашел решение, вот тест, который проходит:

def test_if_form__receive_data_properly__expect_success(self):
""" Test ProfileEditForm with valid data """
user, profile = self.__create_valid_user_and_profile()

form_data = {
    'first_name': profile.first_name,
    'last_name': profile.last_name,
    'image': profile.image,
    'description': profile.description,
    'phone_number': profile.phone_number,
    'email': profile.email,
}
form = ProfileEditForm(data=form_data)
form.instance.user = user

self.assertTrue(form.is_valid())
obj = form.save()
self.assertEqual(obj.first_name, profile.first_name)
Вернуться на верх