python - 如何在 django 中实现验证字段?
问题描述
在 Django 中,我想在BooleanField
我的模型中添加一个类型为“已验证”的字段,该字段应指示当前模型实例是否已由员工用户成员审核。每当“已验证”字段以外的模型实例字段更改时,已验证字段值应重置为False
. 每当仅更改了“已验证”字段时,它的值都应按原样(大多数情况下,True
但也可能False
如此)。
一种可能性是在考虑传递给的post-save
信号处理程序中重置“已验证”字段。然而,在几乎所有用例中,使用信号似乎都被认为是一种反模式。相反,应该覆盖该方法。但仍然在覆盖时,我必须以某种方式手动确定。否则我不知道哪些字段发生了变化。update_fields
save()
save()
save
update_fields
我怎样才能最容易地实现这样的事情。我更喜欢使用第三方包和自定义黑客的解决方案,或者不依赖于其他包的解决方案。但是,将django-model-utils monitorfield
,django-dirtyfields
用于自定义实现或等效的东西也可以。
解决方案
使用dirty-fields
似乎最容易实现经过验证的字段。到目前为止,我想出了如下内容:
DJANGO-APP/models.py:
from django.db import models
from dirtyfields import DirtyFieldsMixin
class VerifiedModel(DirtyFieldsMixin, models.Model):
"""
Abstract class which allows to extend models with user verification model field.
"""
ENABLE_M2M_CHECK = True
verified = models.BooleanField(
default=False,
help_text="The verification status. True means meta-data is verified. False means meta-data is not verified. The verification status is reset to False whenever a field is set.",
)
def _update_verified_field(self):
"""
To be called in inheriting model's save() method.
"""
if self.is_dirty():
if not 'verified' in self.get_dirty_fields():
self.verified = False
class Meta:
abstract = True
class ModelToBeVerified(VerifiedModel):
...
def save(self, *args, **kwargs):
...
self._update_verified_field()
return super(ModelToBeVerified, self).save(*args, **kwargs)
推荐阅读
- java - 存储在 MongoDB 中的 JSON 包含 \,\r,\n 字符
- php - 如何在 php 扩展中获取请求标头
- python-3.x - 比较两个字典列表,如果键和值存在,则从列表中删除字典
- c++ - 概念约束模板函数调用的歧义
- firebase - Flutter、Redux 和 Firebase Auth Invalid argument(s) 错误
- jenkins - 如何从管道脚本触发远程作业
- java - Kafka Consumer 如何以及何时使用 Apache Camel 等 EIP 框架在 Kafka 中提交偏移量?我们如何使用 camel-kakfa 异步处理重试?
- ffmpeg - 如何组合两个 ffmpeg 命令
- python - Pandas groupby 对象唯一计数性能
- c# - Datatables插件从Web服务(.net)加载json数据错误