我正在尝试在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)
有没有办法传入一个dict,通过重用模型实例来序列化外键?
答案 0 :(得分: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)
我不确定这是否是最佳实践的方法。如果这完全不利于谷物,请随意评论。