3

我正在尝试在 Django 中编写我的第一个单元测试。这是一个员工登记表。表单的 Staff 模型与 UserProfile (AUTH_PROFILE_MODULE) 具有 OneToOne 关系。UserProfile 与 django.contrib.auth.models.User 具有 OneToOne 关系。

我正在使用https://github.com/dnerdy/factory_boy为人员模型创建一个测试模型实例。这个想法是使用 StaffFactory,这样我就可以轻松地创建测试模型实例。要创建绑定表单,我需要将数据字典传递给它。我认为在测试表单时只使用django.forms.models.model_to_dict将我的模型实例转换为数据字典会很方便。

现在,我的问题是:model_to_dict 没有遍历我的 Staff 模型(Staff->UserProfile->User)的外键。这意味着表单保持无效,因为表单数据中仍然缺少用户电子邮件等必填字段。

目前我的 StaffRegistrationFormTest 看起来像:

class StaffRegistrationFormTest(unittest.TestCase):
  def test_success(self):
    staff1 = StaffFactory()

    form = StaffRegistrationForm(model_to_dict(staff1))
    # print jsonpickle.encode(model_to_dict(staff1))
    self.assertTrue(form.is_valid(), form.errors)

有没有办法传入一个字典,通过重用模型实例来序列化外键?

4

1 回答 1

2

所以似乎解决这个问题的一种方法是为 Staff 模型的 OneToOne 字段创建额外的字典并合并它们。

这使测试通过:

    data = dict(model_to_dict(staff1).items() + 
        model_to_dict(staff1.profile).items() +
        model_to_dict(staff1.profile.user).items())
    form = StaffRegistrationForm(data=data)
    self.assertTrue(form.is_valid(), form.errors)

我不确定这是否是最佳实践的方式。如果这完全违背粮食,请随时发表评论。

于 2012-07-24T21:18:31.177 回答