Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在模型实例上设置无效字段时强制引发异常_Django_Django 1.10 - Fatal编程技术网

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。