作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个很好的例子来说明如何实现以下目标:
我想使用 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/
我是一名优秀的程序员,十分优秀!