gpt4 book ai didi

python - Django 在空白 CharField 上引发异常

转载 作者:行者123 更新时间:2023-11-30 22:52:37 25 4
gpt4 key购买 nike

我正在使用 Django 和 REST Framework 构建一个 API,为 AngularJS 网站提供数据。我需要确保所有验证都在后端完成。

我有一个名为 Candidate 的模型:

class Candidate(CreatedModel):

first_name = CharField(max_length=30)
last_name = CharField(max_length=100)
email = CharField(max_length=254, unique=True)
phone = CharField(max_length=20, null=True)
resume_path = CharField(max_length=200, null=True)
notes = TextField(null=True)

在模型中,仅需要 first_namelast_nameemail。其余字段可以为空。

然后,我运行服务器并发出测试 POST 请求以创建新的候选人。问题是,即使我没有指定任何字段,它也会简单地为它们提供所有空字符串值 ("")。

我听说过 Django 模型字段的 blank 属性,但它仅适用于表单中的验证,不适用于 HTTP 请求。

现在看来,我解决这个问题的唯一方法是重写 BaseModel 类上的 save() 函数,并检查所有 CharField 是否已填充或引发否则会出错。

想法?提前致谢!

最佳答案

经过一番研究,我找到了一种方法来避免将空字符串保存在我的数据库中。我创建了一个名为 NonBlankCharField 的自定义 Django Field,它继承 CharField 并覆盖 empty_strings_allowed

class NonBlankCharField(CharField):
empty_strings_allowed = False

然后我使用了这个Field而不是CharField。当未指定不应为 NULLField 时,这将引发 IntegrityException

如果您查看 Django 的源代码(在 models/fields.py 文件内),它会显示:

def get_default(self):
"""
Returns the default value for this field.
"""
if self.has_default():
if callable(self.default):
return self.default()
return self.default
if (not self.empty_strings_allowed or (self.null and
not connection.features.interprets_empty_strings_as_nulls)):
return None
return ""

这就是Field获取其默认值的方式。对于 CharFieldempty_strings_allowed 默认设置为 True,因此这会覆盖它,并将 Field 保存为 None,然后引发Exception

但是,其他答案建议使用 DRF 验证器,这可能侵入性较小,因此我将在我的解决方案之上执行此操作。

感谢大家的帮助。

关于python - Django 在空白 CharField 上引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com