首页 > 解决方案 > Django Updateview - 根据字段值或用户对象设置参数

问题描述

我有一个带有表单的 Django UpdateView。在模板中,我必须显示一个“名称”值。如果表单中存在 customer_id 值,则“名称”基于该值。如果为空,则“名称”基于用户对象。“名称”未保存在模型中,因此必须计算。

看起来很简单,但我无法让它工作。我到目前为止所尝试的:

  1. 尝试在 get_context_data() 中设置值 - 不起作用,因为在绑定表单数据之前调用了 get_context_data,因此我无法从表单访问 customer_id 值。

  2. 在表单类中创建一个方法:

    def get_name(self):
       if self.is_bound:
            # return name based on form.cleaned_data['customer_id']
       else:
            # return name based on self.user.user_id
    

调用模板中的方法......但它总是根据用户返回名称。我可以在模板中看到带有值的输入字段,但不知何故表单未绑定?

我对 CBV 不太满意,但我无法将其更改为使用 FBV。有什么想法我怎么能做到这一点?提前致谢!

标签: django

解决方案


好吧,看来我已经成功了。如果您从绑定字段中询问它,您可以在 get_context_data 中获取字段的值(仍然很奇怪,因为 form.is_bound 仍然是 False??)

company_id = context['form']['company_id'].value()

之前,我在做

company_id = context['form'].fields['company_id'].value()

..但这显然行不通。


推荐阅读