【问题标题】:Django database field overwritten by property?Django数据库字段被属性覆盖?
【发布时间】:2014-10-27 19:48:11
【问题描述】:

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

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')

引发异常。有没有可能避免它?

【问题讨论】:

    标签: python django properties model field


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我知道。但我想在过滤器中使用它。我尝试添加 setter:@field.setter,但它不起作用
      猜你喜欢
      • 2017-05-05
      • 2013-01-19
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多