django - 如何在 django 中添加条件以形成有效
问题描述
简介:我正在创建一个事件应用程序,我希望用户在从今天起 3 天到从今天起最多 30 天之间选择一个日期
class CreateEvent(IsVerifiedMixin, CreateView):
model = Event
form_class = EventForm
template_name = 'event/event_form.html'
def form_valid(self, form, *args, **kwargs):
self.object = form.save(commit=False)
event = self.object
today = datetime.date.today()
user = self.request.user
if today + datetime.timedelta(days=3) <= event.date <= today + datetime.timedelta(days=30):
event.user = self.request.user
event.initial_stock = event.stock
slug = self.kwargs['slug']
event.save()
else: #I know the below line of code is wrong. How do I fix this
messages.error(self.request, "The event date has to be equal or more than 3 days away and less than 30 days")
return super().form_valid(form)
IntegrityError
如果日期正确,则上面给了我一个日期是否已创建对象。我只想得到一个表单错误和表单不去下一页
下面是这个的form.py
class EventForm(forms.ModelForm):
price = forms.DecimalField(decimal_places=2, max_digits=5)
stock = forms.IntegerField()
class Meta:
model = Event
fields = ('price', 'stock', 'date', 'time_from', 'time_to', 'lat', 'lon')
解决方案
这是一个简单的修复https://docs.djangoproject.com/en/1.11/ref/forms/api/#django.forms.Form.add_error
if today + datetime.timedelta(days=3) <= event.date <= today + datetime.timedelta(days=30):
...
return super().form_valid(form)
else:
form.add_error(field="date", error="The date has to be more than or equal to 3 days and less than 30 days")
return super().form_invalid(form)
推荐阅读
- python - 如何从 Python 中的 URL 下载 pdf 并将其转换为全文(用于数据集传递的 HTML/字典)?
- python - Ruby 相当于后台调度程序?
- python - 将 curl 请求转换为 python 代码时出现错误请求
- rust - 是否可以在项目范围内启用内部属性?
- php - PHP 8方法覆盖来自同一BaseClass的不同类型
- reactjs - 单击按钮时Reactjs调用另一个组件
- r - 如何在 R 中定义函数的一张图上绘制多条曲线?
- extjs - 使用 `loader` 配置时,ExtJs 不显示 loadMask
- python - Mypy 检查数据类字段和别名
- php - 仅当类型/值为 null 时才捕获 TypeError