Skip to main content
 首页 » 编程设计

python之如何使用 DateTimeField 和 input_formats 在 Django 模型表单中显示验证错误

2024年09月03日36itcoder

我想使用 Django 的模型形式强制执行特定的日期时间格式 --

Class ModelEditForm(forms.ModelForm): 
    date_one = forms.DateTimeField(input_formats=["%Y-%m-%d %H:%M:%S"]) 
 
    class Meta: 
    model = MyModel 
    fields = (date_one, 
              ) 

我的 form.html 文件 --

<form method="POST" enctype="multipart/form-data"> 
    <div class="row"> 
        <div class="form-group col-sm-12 col-md-12"> 
            <label> Enter date and time in this format "%Y-%m-%d %H:%M:%S"  </label> 
            {% render_field form.date_one class="form-control"%} 
        </div> 
       {% csrf_token %} 
             <div class="row"> 
            <div class="form-group col-sm-6 col-md-6"> 
                <button class="btn btn-primary" type="submit">Save</button> 
            </div> 
</form> 

如上图所示,如果输入了正确的日期时间格式(例如,2019-09-16 14:00:00),则保存了表单,但格式错误(例如,2019-09-02 14) ) 不会像其他 ModelForm 字段那样显示错误消息,例如,在 model.DecimalField 中强制执行 max_digit。使用错误的格式不会更新表单,但用户不知道为什么不保存表单。我该怎么做才能在不使用 JavaScript 输入的情况下显示错误消息。

我正在使用 Django 2.0、Python 3.6 和 widget_tweaks。

感谢您的帮助。

请您参考如下方法:

问题不明确,可以按如下方式处理 第一次添加时间和日期的时间戳 updated 更新时间和日期

在模型中

class Sign(models.Model): 
email = models.EmailField() 
FullName = models.CharField(max_length=50, blank=False, null=True) 
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
updated = models.DateTimeField(auto_now_add=False, auto_now=True) 
 
def __str__(self): 
    return self.email 

在形式上

class SignUpForm(forms.ModelForm): 
class Meta: 
    model = Sign 
    fields = ["FullName", "email"] 

我用的是admin 你可以在 View 中使用代码

class SignUp(admin.ModelAdmin): 
    list_display = ["__str__", "timestamp", "updated"] 
    form = SignUpForm 
 
    class Meta: 
        model = Sign 
admin.site.register(Sign, SignUp)