1

我有一个显示日历的特定 html 输入元素,是否可以将此元素添加到我的表单并进行验证?我在我的表单中排除了模型字段,所以当我渲染时不要在表单字段中使用

class AddVisionForm(forms.ModelForm):
    class Meta:
        model = Visions
        exclude = ('init_date',
                   )

我的方法是将帖子传递给表单中的保存方法:form.save(request.POST)并将值保存到实例中:

def save(self, *args, **kwargs):
    instance = super(AddVisionForm, self).save(commit=False)
    post = args[0]
    instance.init_date = post['init_date']
    instance.save()

但这会导致如果用户输入的值不是所需的日期格式,则会导致站点崩溃

4

2 回答 2

1

相反,排除您的 init_date 模型字段,您可以更改 init_date 的小部件(可能是隐藏的输入)并使用 javascript 填充它:

class AddVisionForm(forms.ModelForm):
    class Meta:
        model = Visions
        widgets = {'init_date': forms.HiddenInput()}

您可以从现场验证过程中采取方法。

于 2014-06-13T16:53:18.040 回答
0

您可以使用表单类中的 Meta 小部件来自定义您的 html 输入

例如

class AddVisionForm(forms.ModelForm):
    class Meta:
        model = Visions
        widgets = {
            'init_date': TextInput(attrs={'class': 'date-calendar'}),
        }

您可以使用选择器“.date-calendar”处理输入,并使用您喜欢的 javascript 函数(如 jquery-ui 日历)将该输入转换为日历。

于 2014-06-13T16:51:19.760 回答