[英]How can I implement a verified field in django?
在 Django 中,我想在我的模型中添加一个BooleanField
类型的“已验证”字段,该字段应指示当前模型实例是否已由员工用户成员审查。 每当“已验证”字段以外的模型实例字段更改时,已验证字段值应重置为False
。 每当只有“已验证”字段发生更改时,它的值应按原样采用(大多数情况下为True
但也可能为False
)。
考虑update_fields
传递给save()
update_fields
一种可能性是重置post-save
信号处理程序中的“已验证”字段。 然而,在几乎所有用例中,使用信号似乎都被认为是一种反模式。 相反,应该覆盖save()
方法。 但是在覆盖save
我仍然必须以某种方式手动确定update_fields
。 否则我没有关于哪些字段发生变化的信息。
我怎样才能最容易地实现这样的事情。 我更喜欢使用第三方包的解决方案 wo 自定义 hacks 或与其他包没有任何依赖关系的解决方案。 但是,使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.