Django数据库字段被属性覆盖?

时间:2014-09-03 10:36:32

标签: python django properties model field

我想在我的模型中有一个私有字段,并且仅在某些情况下使用它。但在外面我想以一种常见的方式使用它。例如,我的模型是这样的:

class MyModel(models.Model):
    __field = models.TextField(db_column = 'field')

    @property
    def field(self):
        if self.newSystem:
            return someOtherValue
        else:
            return __field

现在是这样的:

MyModel.objects.filter(field='something')

引发了一个例外。是否有可能避免它?

2 个答案:

答案 0 :(得分:1)

你不能在过滤器中使用字段。但是你可以访问像这样的字段

obj = MyModel.objects.all()[0]
obj.field

答案 1 :(得分:1)

我不确定你的困惑在这里。无论如何,无法在过滤器中使用方法或属性。 ORM无法知道属性是指基础数据库字段。您可以直接使用字段 - 即__field - 而不是属性本身。