2012-07-24 53 views
3

我想在Django中编写我的第一个单元测试。这是工作人员登记表格。 表单的Staff模型与UserProfile(AUTH_PROFILE_MODULE)具有OneToOne关系。 UserProfile与django.contrib.auth.models.User具有OneToOne关系。Django:从模型实例创建绑定表单

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

,我的问题是:model_to_dict不经过我的员工模型(Staff-> UserProfile->用户)的外键。这意味着表单保持无效,因为用户的电子邮件等必填字段在表单数据中仍然缺失。

目前我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) 

有没有办法在一个字典,其中外键是由模型实例使用重新序列通过?

+0

upvote for clear sourcing for model_to_dict()。这让我今天节省了一个小时。 – BobHy 2015-11-28 01:44:07

回答

2

这样看来,如果解决这个的一种方式是通过为员工模型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) 

我不知道这是否是在最佳实践方面要走的路。随意评论,如果这完全反对粮食。

相关问题