在模型实例上设置无效字段时强制引发异常

Force exception to be raised when setting invalid field on model instance

如果我不小心在模型上打错了字段名称,我想引发异常而不是默默地失败:

obj = MyModel()
obj.fieldsdoesnotexist = 'test' # No exception is raised

如何让 Django 在设置无效字段时引发异常?

您可以通过创建覆盖 setattr 行为的 Mixin 来实现此目的,如下所示:

class ValidateFieldNamesMixin:
    def __setattr__(self, name, value):
        if not hasattr(self, name):
            raise ValueError('Invalid field name!')
        return super().__setattr__(name, value)

而且你必须在你的 MyModel 中继承这个 mixin class:

class MyModel(ValidateFieldNamesMixin, Model):
    # etc