gpt4 book ai didi

Django:从模型实例创建绑定(bind)表单

转载 作者:行者123 更新时间:2023-12-01 15:15:13 27 4
gpt4 key购买 nike

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

我正在使用 https://github.com/dnerdy/factory_boy为员工模型创建一个测试模型实例。我的想法是使用 StaffFactory,这样我就可以轻松地创建测试模型实例。要创建绑定(bind)表单,我需要向它传递一个数据字典。我认为在测试表单时仅使用 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)

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

最佳答案

因此,似乎解决此问题的一种方法是为 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)

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

关于Django:从模型实例创建绑定(bind)表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com