【问题标题】:Access the form that caused a post_save [Django]访问导致 post_save [Django] 的表单
【发布时间】:2018-07-26 20:25:23
【问题描述】:

有没有办法可以访问导致post_save 的表单?

用例是我有一个未附加到特定模型的字段(复选框),但它是表单本身的一个额外字段。

我想知道在保存表单并存储模型时该字段是被选中还是未选中,并且 post_save 信号是放置应该处理该额外字段的逻辑的好地方。

我也愿意接受其他建议,我可以将那段代码放在哪里。

【问题讨论】:

    标签: python django python-3.x django-1.10


    【解决方案1】:

    post_save 不会知道任何可能导致模型更改的形式。

    如果您想访问该复选框值,您需要在表单类本身中进行。我可能会覆盖表单的clean() 方法,并在那里检查cleaned_data['checkbox_field'] 中的复选框值,然后用它做任何你需要的事情。

    【讨论】:

    • clean 方法对于我的目的来说太快了。模型保存成功后,我需要做我的逻辑。
    • 那么您可能想要覆盖表单上的save() 方法并将逻辑放在那里。假设您使用的是ModelForm
    • 但是在表单的save()方法中做业务逻辑感觉挺难看的。
    • 我猜在不知道你在做什么的情况下很难提出其他建议。我认为您基本上有三个丑陋的选择:将复选框值松鼠到某处以供以后使用,直接在您的视图中访问request.POST,或者在某处的表单类中执行您的操作。或者重新考虑你的方法。
    猜你喜欢
    • 2012-11-17
    • 2018-02-28
    • 2020-04-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2014-11-05
    • 2019-11-23
    相关资源
    最近更新 更多