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

Django运行makemigrations报gettext()意外关键字参数'null'错误

错误定位

报错TypeError: gettext() got an unexpected keyword argument 'null'的触发点在models.py的Plan模型定义,和Task模型、序列化器、视图代码无关。
你在写date字段时出现了括号错位:把本该传给models.DateField的null=False、blank=False两个参数,写到了翻译函数_()(即gettext)的调用括号内部。gettext仅接收待翻译的字符串参数,不识别null这类关键字参数,模型扫描阶段执行到这行代码就会直接抛出类型错误。
错误代码片段:

# 错误写法:null、blank参数被错误包裹在_()的括号内
date = models.DateField(verbose_name=_("Date"), help_text=_("Enter the date that you want to plan", null=False, blank=False))
修复方案
  • 第一步:修正括号位置,将字段参数移回models.DateField的参数列表中,修正后的代码如下:
date = models.DateField(
    verbose_name=_("Date"),
    help_text=_("Enter the date that you want to plan"),
    null=False,
    blank=False
)
  • 第二步:修复视图中模型保存的逻辑错误。你当前写的data.user = request.user是给序列化器实例绑定属性,不会写入模型数据,保存时会触发user字段非空报错,修正视图的post方法逻辑:
def post(self, request):
    serializer = CreateTaskSerializer(data=request.data)
    if serializer.is_valid():
        # 通过save方法传入外键字段值,不需要手动给序列化器加属性
        serializer.save(user=request.user)
        return Response({
            "message": _("You've just created your task")
        }, status=status.HTTP_200_OK)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  • 额外优化建议:不要在models.py顶层直接调用get_user_model()获取用户模型,容易引发循环导入问题,将两个模型的user外键关联值改为settings.AUTH_USER_MODEL即可:
# 删掉文件顶部的 User = get_user_model() 写法
# 外键修改示例
user = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE,
    related_name="utask",
    verbose_name=_("User")
)
验证

修正括号错位问题后,重新执行python manage.py makemigrations即可正常生成迁移文件,不会再触发gettext相关的参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:21:26