使用SelectDateWidget的两个django表单字段

时间:2016-02-16 21:57:16

标签: python django django-forms

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_datemove_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())

问题是如何正确地写这个?

1 个答案:

答案 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()