使用 SelectDateWidget 的两个 Django 表单字段

Two django form fields using SelectDateWidget

我在 forms.py 中的 ContactView 设置如下:

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

问题是怎么写才正确?

在你的代码中

move_in_date, move_out_date = ...

您需要在右侧有两个变量(或一个包含两个元素的可迭代对象)才能使赋值生效。这就是您收到错误 DateField is not iterable 的原因。您可以在右侧定义两次 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()