django - Django Updateview - 根据字段值或用户对象设置参数
问题描述
我有一个带有表单的 Django UpdateView。在模板中,我必须显示一个“名称”值。如果表单中存在 customer_id 值,则“名称”基于该值。如果为空,则“名称”基于用户对象。“名称”未保存在模型中,因此必须计算。
看起来很简单,但我无法让它工作。我到目前为止所尝试的:
尝试在 get_context_data() 中设置值 - 不起作用,因为在绑定表单数据之前调用了 get_context_data,因此我无法从表单访问 customer_id 值。
在表单类中创建一个方法:
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。有什么想法我怎么能做到这一点?提前致谢!
解决方案
好吧,看来我已经成功了。如果您从绑定字段中询问它,您可以在 get_context_data 中获取字段的值(仍然很奇怪,因为 form.is_bound 仍然是 False??)
company_id = context['form']['company_id'].value()
之前,我在做
company_id = context['form'].fields['company_id'].value()
..但这显然行不通。
推荐阅读
- reactjs - 如何在 Material UI Labs 自动完成中创建可点击的第一个选项
- r - R - "row-wise" sampling from Matrix
- angular - ngFor中的Angular Material扩展面板API,如何自动关闭
- c++ - 这是否错过了优化机会
- php - 拒绝未经授权的用户访问 url/views
- command-line - 批处理“CALL”命令的问题
- selenium - 是否可以在一个独立的 linux 无头 docker 容器上运行多个 selenium firefox 实例?
- ios - 如何将 userDefault 乘以一个数字?
- python-3.x - 如何获得两个列表之间的对称差异?
- javascript - 有什么方法可以使用选项索引吗?