Django"不能设置属性"在模型中

时间:2016-02-23 17:20:13

标签: python django

我有一个像这样的模型:

self.init(frame:frame)

我添加了 location 属性。 我在运行时遇到此错误。我只粘贴了最近一次调用的部分,在这种情况下是len()(我知道,改为使用 count )。

UILabel

我无法弄清楚为什么会出错?如果我将其称为 locationx ,那么就没有错误。

Django是否有一些特殊的属性定义规则?

我该怎么调试呢?

我添加了属性,因为我添加了 test 间接,并希望尽可能少地更改代码。当然,我可以将每个class MyReport(models.Model): group_id = models.PositiveIntegerField(blank=False, null=False) test = models.ForeignKey(Test, on_delete=models.CASCADE) owner = models.ForeignKey(User, editable=False, default=get_current_user, on_delete=models.CASCADE) user_objects = UserFilterManager() @property def location(self): return self.test.location 更改为 File "C:\Python27\Lib\site-packages\django\db\models\query.py", line 240, in __len__ self._fetch_all() File "C:\Python27\Lib\site-packages\django\db\models\query.py", line 1074, in _fetch_all self._result_cache = list(self.iterator()) File "C:\Python27\Lib\site-packages\django\db\models\query.py", line 75, in __iter__ setattr(obj, attr_name, row[col_pos]) AttributeError: can't set attribute ,但这会令人讨厌。如果我可以为数据库搜索定义别名,那将是很好的,所以我需要更改它们。

编辑:回答评论:

  1. 我不想设置值,我只想要一个属性(getter)。我希望能够report.location而不是添加间接report.test.location(不想更改位置在报表模型中的现有代码)。
  2. report.locationreport.test.location工作,self.test.location也有效。
  3. 我在上面提到了这一点,但我会重复一遍。我所做的只是在查询上调用len(),例如report.test.location
  4. 以下是Eclipse控制台的完整跟踪:

    reports.locationx

4 个答案:

答案 0 :(得分:14)

问题是名字冲突。

显然在查询数据库时我有:

objs = MyReport.objects.annotate(location=F('test__location'))

这为对象添加了location(在__dict__中没有看到它,但也许我只是错过了它)。这意味着我可以放弃这个属性,因为我可以打电话给report_instance.location。当然,这意味着访问MyReport的所有地方都需要添加注释(特殊管理器?)。

答案 1 :(得分:0)

尝试确保设置test

 @property
 def location(self):
     return self.test.location if self.test else None

答案 2 :(得分:0)

我有同样的问题。我解决了

@location.setter
def location(self, val):
    pass

答案 3 :(得分:0)

刚刚遇到了一个类似的问题,似乎通过确保我没有使用与我试图调用的属性同名的别名进行注释来解决。