Django CharField TypeError: __init__() 得到了一个意外的关键字参数“empty_value”

Posted

技术标签:

【中文标题】Django CharField TypeError: __init__() 得到了一个意外的关键字参数“empty_value”【英文标题】:Django CharField TypeError: __init__() got an unexpected keyword argument 'empty_value' 【发布时间】:2019-10-11 15:39:13 【问题描述】:

Django 建议我可以为 CharField 设置 empty_value:https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.CharField.empty_value

我正在尝试更改我的字段:

my_field = models.CharField(max_length=80, blank=True)

到:

my_field = models.CharField(max_length=80, blank=True, null=True, empty_value=None)

我在尝试创建迁移时收到此错误:

文件“/Virtualenv/python3.7/site-packages/django/db/models/fields/init.py”,第 1039 行,在 init super().init(*args, **kwargs) TypeError: init() 得到了一个意外的关键字参数“empty_value”

原因是因为我想在包含my_field等字段的模型上设置一个unique_together,行为如下:

如果my_field 为NULL,我希望unique_together 子句始终允许其他组合,因为NULL != NULL in SQL。 如果 my_field 不为 NULL,我希望 unique_together 子句针对其他字段检查唯一性。

我不希望验证不是数据库验证,例如 cleanvalidate_my_field 方法或类似方法。

【问题讨论】:

该链接用于 Django 表单字段,而不是模型字段 【参考方案1】:

您尝试将forms.CharField 用作没有empty_valuemodels.CharField。对于需要使用default field的模型。

这段代码在哪个文件中?

如果在models.py(您定义模型)中,则使用default 而不是empty_value

如果在forms.py(您定义表单)中,则导入django.forms,而不是django.db.models,然后您可以使用:

my_field = forms.CharField(max_length=80, required=False, empty_value=None)

【讨论】:

以上是关于Django CharField TypeError: __init__() 得到了一个意外的关键字参数“empty_value”的主要内容,如果未能解决你的问题,请参考以下文章

Django CharField没有定义

Django-Postgres:CharField 的长度作为主键

Django-Admin:作为 TextArea 的 CharField

Django 1.7 空白 CharField/TextField 约定

django CharField按整形排序

Django:使用正则表达式检查表单中的 CharField 格式