【问题标题】:DateField -- "enter a valid date" messageDateField -- “输入有效日期”消息
【发布时间】:2015-05-06 16:44:19
【问题描述】:

我有点困惑,为什么它一直返回“输入有效日期”消息。是我的格式吗?

我尝试了 %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 django-forms django-views


【解决方案1】:

首先在您的 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 小部件更改为 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
    })

【讨论】:

  • 啊,谢谢 Tanguy。你的解决方案奏效了。是我的表单验证不正确。
猜你喜欢
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多