【问题标题】:How to validate 'instance' in a Django form constructor MyForm(instance=myInstance)如何在 Django 表单构造函数 MyForm(instance=myInstance) 中验证“实例”
【发布时间】:2010-01-30 23:57:36
【问题描述】:

我以不同于显示格式的格式存储数据。
我已经在表单的 clean_weight() 方法中完成了表单到数据库的转换,这使我可以在保存数据之前访问正确的格式数据。

现在我假装在显示表单之前操纵实例权重,但我看不到在表单代码中执行此操作的好地方。

我知道有两种选择:

  • 创建构造函数并在那里处理转换。这对我来说看起来不太好,因为一旦定义了构造函数,它就适用于所有可能的构造函数调用(不仅适用于实例 = 一个)并且仅适用于表单的 1 或 2 个字段,我更喜欢另一种解决方案。
  • 不在表单代码中执行此操作,将其放在我使用的每个视图中,看起来不舒服,因为我需要在多个地方执行此操作,我需要从表单中删除 clean_weight 以保留它一致,所以我需要在我使用表单的每个视图中都进行这两种操作。

在这两个中,看起来更好的一个是构造函数,但对我来说很臭。
有什么提示吗?

【问题讨论】:

    标签: django validation constructor django-forms


    【解决方案1】:

    自定义表单字段是您所需要的 - 简单、干净、可在任何表单上重复使用。甚至可能是自定义模型字段,但这取决于您。

    【讨论】:

    • 是的。创建类似 WeightField 的东西。把所有时髦的转换都放在那里一次,永远不要再考虑它。如果这是第一次制作自定义字段,那可能会让人望而生畏。 去做吧。 :) 你甚至可以做一些事情,比如为你想在其中出现的单元添加参数,从而真正为你提供一个干净、有用、可重复使用的工具,使用起来很愉快相对于代码中的散射转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2022-06-18
    • 2018-11-24
    • 2018-02-17
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多