日期字段 -- "enter a valid date" 消息

DateField -- "enter a valid date" message

我有点困惑为什么它一直返回 'enter a valid date' 消息。是我的格式吗?

我尝试了 %m-%d-%Y 的不同组合,但仍然没有成功。

models.py

class DeliveryDate(models.Model):
    cart = models.ForeignKey('Cart', null=True, blank=True)
    date = models.DateField()

    def __str__(self):
        return str(self.cart.id)
        return self.date

views.py

def add_delivery_date(request):

    the_id = request.session['cart_id']
    cart = Cart.objects.get(id=the_id)

    form = DeliveryDateForm(request.POST or None)

    if request.method == "POST":
        if form.is_valid():
            delivery_date = form.save(commit=False)
            date = request.POST['date']

            delivery_date = DeliveryDate.objects.create(cart=cart, date=date)
            delivery_date.save()

            return HttpResponseRedirect('thank-you.html')

    context = {
        "form": form
    }


    return render(request, 'choose_delivery_date.html', context)

forms.py

class DeliveryDateForm(forms.ModelForm):
    date = forms.DateField(input_formats=['%m %d %Y'], widget=SelectDateWidget, initial=datetime.date.today())

    class Meta:
        model = DeliveryDate
        fields = ['date']

首先,在您的 Django ModelForm 中,让我们在不添加额外字段的情况下更改日期模型字段的小部件。 这是在 __ init __ 方法中完成的:

from django.forms.extras.widgets import SelectDateWidget

class DeliveryDateForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(DeliveryDateForm, self).__init__(*args, **kwargs)
        #Change date field's widget here
        self.fields['date'].widget = SelectDateWidget()

    class Meta:
        model = DeliveryDate
        fields = ['date']

像您一样添加字段:

class DeliveryDateForm(forms.ModelForm):
    date = forms.DateField(input_formats=['%m %d %Y'], widget=SelectDateWidget, initial=datetime.date.today())

实际上是在您的 ModelForm 中添加一个额外的 FormField,它与 ModelField 同名。 这样做,您只需将绑定日期 ModelField 小部件更改为 Day/month/year

的 3 个选择

其次,您的表单验证很奇怪: 我通常写的是这样的:

def add_delivery_date(request):

    the_id = request.session['cart_id']
    cart = Cart.objects.get(id=the_id)

    form = DeliveryDateForm()
    if request.method == "POST":
        form = DeliveryDate(data=request.POST)
        if form.is_valid():
            delivery_date = form.save(commit=False)
            delivery_date.cart = cart 
            delivery_date.save()
            return HttpResponseRedirect('thank-you.html')

    return render(request, 'choose_delivery_date.html', {
        'form': form
    })