如何更改表单字段'验证前的值?

时间:2015-07-10 22:19:49

标签: python django validation

我的models.py中有一个 FloatField ,它必须存储(除其他外)分钟,秒和毫秒。以 ss.ms 的格式存储它们并不重要,但我必须提供以 ModelForm 格式插入它们的可能性。 > mm.ss.ms 。
问题是, mm.ss.ms 的表单验证不符合 FloatField ,我很难找到解决方法。

_clean 函数很棒,但是在Django验证之后运行。如何清除Django验证之前之前的数据

编辑:

models.py

from django.db import models

class Result(models.Model):
    date = models.DateField()
    result = models.FloatField()
    rank = models.IntegerField(blank=True, null=True)

forms.py

class AddResult(forms.ModelForm):
    class Meta:
        model = Result
        fields = ('result', 'rank', 'date')

    def __init__(self, *args, **kwargs):
        self.profile = kwargs.pop('profile', None)
        super(AddResult, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.label_class = 'form-label-div'
        self.helper.field_class = 'form-field-div'
        self.helper.label_class = 'col-xs-4'
        self.helper.field_class = 'col-xs-8'
        self.helper.layout = Layout(
            Div(
                Div(
                    'result',
                    css_class="col-xs-4",
                ),
                Div(
                    'rank',
                    css_class="col-xs-4",
                ),
                css_class="row",
            ),
            Div(
                Div(
                    'date',
                    css_class="col-xs-4",
                    css_id="date-picker"
                ),
                Div(
                    css_class="col-xs-4",
                    css_id="date-picker"
                ),
                css_class="row",
            )
        )

    def save(self, commit=True):
        result = super(AddResult, self).save(commit=False)
        if self.profile:
            result.profile = self.profile
        result.save()

PS!最初我写道我有一个有问题的 IntegerField ,但那是一种大脑放屁。我们当然在谈论 FloatField 。主要问题仍然存在。

1 个答案:

答案 0 :(得分:1)

我建议您不要使用模型表单而是使用forms.form并在** form.is_valid()**之前的视图中尝试使用REQUEST方法检索表单字段。  可能会有所帮助。