我ContactView
中的forms.py
设置如下:
from django.forms import ModelForm, extras
from .models import ContactForm
from django import forms
from django_countries.widgets import CountrySelectWidget
import datetime
class ContactView(ModelForm):
"""Docstring for ContactView. """
birthdate = forms.DateField(widget=extras.SelectDateWidget(years=range(2025, 1939, -1)))
message = forms.CharField(widget=forms.Textarea)
move_in_date, move_out_date = forms.DateField(widget=extras.SelectDateWidget(),
initial=datetime.date.today())
class Meta:
fields = ['name', 'email', 'topic', 'message',
'birthdate', 'move_in_date', 'move_out_date',
'country']
model = ContactForm
widgets = {'country': CountrySelectWidget()
}
move_in_date
和move_out_date
如何使用SelectDateWidget
,(我想要这个,因为我需要两次显示这个小部件)这里给我一个不错的TypeError
,因为DateField
不可迭代。
我也不希望它们像这样编写,即使这样做有效,但闻到错误的代码。
move_in_date = forms.DateField(widget=extras.SelectDateWidget(), initial=datetime.date.today())
move_out_date = forms.DateField(widget=extras.SelectDateWidget(), initial=datetime.date.today())
问题是如何正确地写这个?
答案 0 :(得分:1)
在您的代码中
move_in_date, move_out_date = ...
您需要右侧的两个变量(或具有两个元素的可迭代变量)才能使分配生效。这就是您收到错误DateField
无法迭代的原因。您可以在右侧定义DateField两次,错误将消失。
如果您尝试删除代码中的重复内容,只需将公共代码分解为函数:
def get_move_date_field():
""" return a DateField suitable for move_in and move_out """
return forms.DateField(widget=extras.SelectDateWidget(), initial=datetime.date.today())
class ContactView(ModelForm):
....
move_in_date = get_move_date_field()
move_out_date = get_move_date_field()