gpt4 book ai didi

python - 如何在 Django 表单 clean() 方法中访问清理后的数据?

转载 作者:行者123 更新时间:2023-12-01 02:09:28 25 4
gpt4 key购买 nike

我想在 Django 表单中实现一个输入字段,phone_type ,仅当另一个字段 phone_number 时才需要,已填写。我正在阅读 https://www.fusionbox.com/blog/detail/creating-conditionally-required-fields-in-django-forms/577/ 处的示例关于如何做到这一点:

def clean(self):
shipping = self.cleaned_data.get('shipping')

if shipping:
msg = forms.ValidationError("This field is required.")
self.add_error('shipping_destination', msg)
else:
# Keep the database consistent. The user may have
# submitted a shipping_destination even if shipping
# was not selected
self.cleaned_data['shipping_destination'] = ''

return self.cleaned_data

其中模型定义为

from django.db import models

class ShippingInfo(models.Model):
SHIPPING_DESTINATION_CHOICES = (
('residential', "Residential"),
('commercial', "Commercial"),
)

shipping = models.BooleanField()
shipping_destination = models.CharField(
max_length=15,
choices=SHIPPING_DESTINATION_CHOICES,
blank=True
)

将此代码与 https://docs.djangoproject.com/en/2.0/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other 处的文档进行比较时,但是,我注意到没有调用 super().clean() 。而不是访问self.cleaned_data直接,我应该这样做

cleaned_data = super().clean()
shipping = cleaned_data.get('shipping')

在自定义的第一行clean()方法?

(我还对无需额外 jQuery/JavaScript 代码即可使字段有条件可见的方法感兴趣,例如使用 Django Crispy Forms 和/或 HiddenInput 小部件)。

最佳答案

forminstance.is_validforminstance.full_clean 将隐式调用表单的 clean 方法,届时 forminstance.cleaned_data 将使用以下内容填充字典根据表单字段输入正确类型的数据。在您发布的示例中调用 super 是为了防止您在表单类层次结构中具有继承。为了澄清。如果您有 super 不会有什么坏处,但如果您不是从没有定义任何字段的表单类继承,它不会改变任何内容。

关于python - 如何在 Django 表单 clean() 方法中访问清理后的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794884/

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