gpt4 book ai didi

python - key 在 django 中表单的 clean 方法中的已清理数据中不可用

转载 作者:行者123 更新时间:2023-11-30 22:44:47 25 4
gpt4 key购买 nike

我有以下 ModelForm 类。

from django.forms import ModelForm
from tenant.models import EventsModel
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from django import forms

class EventsForm(ModelForm):
class Meta:
model = EventsModel
fields = '__all__'

def clean_start_date_time(self):
# can not be before than now.
data = self.cleaned_data
print(data)
start_date_time = data.get("start_date_time")
now_date_time = timezone.now()
if start_date_time < now_date_time:
raise forms.ValidationError(
_('Start time has passed.'),
code='invalid',
)
return data

def clean(self):
# end date can not be before or equal to start date time
# data = super(EventsForm, self).clean()
data = self.cleaned_data
print(data)
start_date_time = data.get("start_date_time")
end_date_time = data.get("end_date_time")
if start_date_time >= end_date_time:
raise forms.ValidationError(
_('End time should be after start time.'),
code='invalid',
)

clean_start_date_time 引发错误,因为 start_date_time 已过去。start_date_timeclean_start_date_time 方法中可用,但在 clean 方法中不可用。 为什么会发生这种情况?

我用两种方法打印了清理后的数据,清理后的数据存在差异。 为什么会出现这种差异?

clean_start_date_time中清理的数据:

{'tenant_sys_id': None, 'name': 'dfghj', 'start_date_time': datetime.datetime(2016, 12, 21, 13, 20, 23)}

清理后的数据clean:

{'created_by': None, 'last_updated_when': None, 'last_updated_by': None, 'tenant_sys_id': None, 'notes': 'g', 'name': 'dfghj', 'created_when': None, 'end_date_time': datetime.datetime(2016, 12, 31, 14, 20, 29)}

最佳答案

它不存在,因为您在 clean_start_date_time 中引发了错误,而不是返回。请注意,您确实做了您应该做的事情。您永远不应该假设某个字段将出现在 clean 中;如果用户没有填写该字段的数据,也会发生同样的事情。在执行其他操作之前检查该值是否存在。

关于python - key 在 django 中表单的 clean 方法中的已清理数据中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407223/

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