Chr*_*ris 1 django django-forms django-views
我有点困惑为什么它不断返回“输入有效日期”消息。是我的格式问题吗?
我尝试过 %m-%d-%Y 的不同组合,但仍然没有成功。
模型.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
Run Code Online (Sandbox Code Playgroud)
视图.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)
Run Code Online (Sandbox Code Playgroud)
表格.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']
Run Code Online (Sandbox Code Playgroud)
首先,在 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']
Run Code Online (Sandbox Code Playgroud)
通过像你一样添加一个字段:
class DeliveryDateForm(forms.ModelForm):
date = forms.DateField(input_formats=['%m %d %Y'], widget=SelectDateWidget, initial=datetime.date.today())
Run Code Online (Sandbox Code Playgroud)
实际上是向您的 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
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2737 次 |
| 最近记录: |