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

时间:2017-03-13 08:54:29

标签: django django-1.10

如果我不小心在模型上输入字段名称,我想提出异常而不是默默地失败:

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

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

1 个答案:

答案 0 :(得分:2)

你可以通过创建覆盖这样的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 MyModel(ValidateFieldNamesMixin, Model):
    # etc