[英]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.