首页 > 解决方案 > 如何在 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')

标签: djangopython-3.xdjango-formsdjango-views

解决方案


这是一个简单的修复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)

推荐阅读