You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django禁止空输入入库及Admin页数据、日期字段不显示问题排查

问题1:表单提交空值直接入库修复

问题原因

当前视图逻辑接收到POST请求后,未对user_name参数做任何非空校验,直接调用create方法写入数据库;同时模型层的字符字段未做非空约束,空字符串符合CharField的默认存储规则,因此空值会直接落库。
另外注意到模型字段存在拼写误差:massenger_name为拼写错误,标准写法应为passenger_name,可按需调整。

修复方案

  • 第一层:视图层增加非空校验
    取POST参数时优先用get方法避免KeyError,拿到参数后先去除首尾空格,判断为空则直接返回错误提示,不执行入库操作。
    修复后的views.py代码:
    from django.shortcuts import render, redirect
    from .models import Name
    from django.contrib import messages
    
    def Home(request):
        if request.method == 'POST':
            # 取参数默认空字符串,同时去除首尾空格拦截全空格输入
            user_name = request.POST.get('user_name', '').strip()
            if not user_name:
                messages.error(request, '用户名不能为空')
                return redirect(Home)
            Name.objects.create(massenger_name=user_name)
            return redirect(Home)
        return render(request, 'index.html')
    
  • 第二层:模型层增加非空约束
    给字符字段加上非空限制,从数据库层面兜底拦截空值。注意CharField类型不要设置null=True,空值统一用空字符串管控即可。
    调整后的models.py对应字段:
    class Name(models.Model):
        # 增加blank=False约束,禁止表单/接口提交空值
        massenger_name = models.CharField(max_length=50, blank=False)
        # auto_now_add字段会自动填充创建时间,不需要额外加null、blank参数
        action_time = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return str(self.massenger_name)
    
    改完模型记得依次执行python manage.py makemigrations和python manage.py migrate同步数据库结构。

问题2:Admin后台不显示DateTimeField字段修复

问题原因

Django Admin默认不会自动展示带auto_now_add/auto_now属性的时间字段,这类字段属于自动填充的只读字段,需要手动在Admin注册类里配置到展示列表、只读字段列表中,否则后台不会渲染该字段内容。

修复方案

在对应app的admin.py中注册模型时,显式配置要展示的字段,把时间字段加入只读字段列表。如果app下没有admin.py,直接新建即可,参考代码:

from django.contrib import admin
from .models import Name

class NameAdmin(admin.ModelAdmin):
    # 列表页展示的字段
    list_display = ('massenger_name', 'action_time')
    # 编辑页展示的字段
    fields = ('massenger_name', 'action_time')
    # 自动填充的时间字段设为只读,避免编辑页报错
    readonly_fields = ('action_time',)

admin.site.register(Name, NameAdmin)

配置完成后重启Django服务,进入Admin后台即可看到时间字段正常显示。


内容的提问来源于stack exchange,提问作者data data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:48:41