gpt4 book ai didi

python - 在 Django View 中寻找 get_or _create 的良好示例用法并引发表单错误

转载 作者:行者123 更新时间:2023-11-30 23:59:06 25 4
gpt4 key购买 nike

我正在寻找一个很好的例子来说明如何实现以下目标:

我想使用 get_or_create 来检查数据库中是否已存在对象。如果没有,那么它将被创建。如果它确实存在,那么我将不会创建新对象,而是需要引发表单错误以通知用户他们需要输入不同的数据(例如,不同的用户名)。

该 View 包含:

p, created = Person.objects.get_or_create(
email = registration_form.cleaned_data['email'],
defaults = {
'creationDate': datetime.datetime.now(),
'dateOfBirth': datetime.date(1970,1,1)
})

因此,“p”将包含现有的 Person(如果存在),如果不存在,则包含新的 Person。我想对“created”中的 bool 值进行操作,以便跳过保存人员并重新显示registration_form并引发适当的表单验证错误。

我正在考虑的替代方案是在自定义表单验证方法中进行检查,以查看提供的“电子邮件”字段中的数据是否存在,并仅引发验证错误。

最佳答案

这不是 get_or_create 的一个很好的用法示例。表单验证(您显然尝试这样做)在保存之前进行,并且这些根本不应该混合。您应该确保您的表单在保存之前经过验证,但“已存在”检查是验证的一部分。

在表单的 clean() 方法中,编写如下内容:

try:
Person.objects.get(email=...)
raise forms.ValidationError(...)
except Person.DoesNotExist:
pass

这是您提出的替代方案,也是最明智的解决方案。

get_or_create 的良好用法例如是一个标记库,您希望在其中动态创建新标记或收集有关旧标记的信息,而不必一直编写 try/except 。

编辑:另外,如果您想这样做以避免稍后分离的获取/创建循环,请确保使用模型表单。 modelforms 的 save 方法返回刚刚创建的实例。

关于python - 在 Django View 中寻找 get_or _create 的良好示例用法并引发表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2628755/

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