Django 在模型实例上设置无效字段时强制引发异常
如果我不小心在模型上键入了字段名,我希望引发异常,而不是默默失败:Django 在模型实例上设置无效字段时强制引发异常,django,django-1.10,Django,Django 1.10,如果我不小心在模型上键入了字段名,我希望引发异常,而不是默默失败: obj = MyModel() obj.fieldsdoesnotexist = 'test' # No exception is raised 设置无效字段时,如何使Django引发异常?您可以通过创建覆盖setattr行为的Mixin来实现这一点,如下所示: class ValidateFieldNamesMixin: def __setattr__(self, name, value): if n
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 MyModel(ValidateFieldNamesMixin, Model):
# etc
您可以通过创建覆盖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
谢谢您知道为什么它允许我首先设置无效字段吗?您可以为类设置新的属性/方法,这是python的正常行为。所以如果你想改变它,你必须覆盖setattr。谢谢!您知道为什么它允许我首先设置无效字段吗?您可以为类设置新的属性/方法,这是python的正常行为。因此,如果要更改它,必须重写setattr。