哪个规则/准则会中断(将属性添加到orm实例)

时间:2019-01-25 08:36:46

标签: django django-orm terminology

我遇到了以下代码:

class MyModel(model.Model):
    def __init__(self, *args, **kwargs):
        self._log_data = dict()
        super(MyModel, self).__init__(*args, **kwargs)

    def send_data(self, obj):
        self._log_data['foo'] = obj.foo
        ...

我只是觉得将._log_data添加到orm实例是错误的。

到目前为止,我只是感觉这种实现并不明显,而且我缺少匹配项。

根据哪个规则/准则,这不是干净/好的代码吗?

1 个答案:

答案 0 :(得分:-1)

如果您愿意的话,我建议将lunch aosp_x86-eng设置为类变量。

_log_data

在Django shell中测试:

class MyModel(models.Model):
    _log_data = None
    field_a = models.IntegerField(null=True)

    def send_data(self, bar):
        if self._log_data is None:
            self._log_data = dict()
        self._log_data['foo'] = bar

可以确认class变量根本不影响其他对象。这是在Django的a = MyModel() print(a._log_data) >>> None a.send_data('asdf') print(a._log_data) >>> {'foo': 'asdf'} print(MyModel._log_data) >>> None b = MyModel() print(b._log_data) >>> None 模型中使用的。

AbstractBaseUser

所以我不认为这违反了规则。

+ ps:如果我没重点,我想让你指出。