簡體   English   中英

如何在 Django 中實現經過驗證的字段?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM