【发布时间】:2014-04-06 09:04:49
【问题描述】:
注意:我终于找到了这个错误,所以下面的文字可能只对我有价值。简短的回答:我决定根据我之前定义为@property-method 的属性创建一个模型字段。我唯一没有删除 @property-method 的地方是 Orchid 模型。
经过一些调整和戳我的代码,我突然收到这个错误:AttributeError: can't set attribute。我没有更改 Orchid 的任何代码,但我现在收到此错误:
>>> orc = Orchid.objects.get(id=1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/manager.py", line 151, in get
return self.get_queryset().get(*args, **kwargs)
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/query.py", line 301, in get
num = len(clone)
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/query.py", line 77, in __len__
self._fetch_all()
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/query.py", line 854, in _fetch_all
self._result_cache = list(self.iterator())
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/query.py", line 230, in iterator
obj = model(*row_data)
File "/Users/cole/PycharmProjects/Sites/virtualenvs/orchidislandcapital.com/lib/python2.7/site-packages/django/db/models/base.py", line 347, in __init__
setattr(self, field.attname, val)
AttributeError: can't set attribute
兰花的定义是class Orchid(FinancialReturnMixin, PeerPerformance)。我没有改FinancialReturnMixin,其代码为:
class FinancialReturnMixin(models.Model):
exclude_special_dividend = True
round_to = 4
shares_outstanding = models.FloatField(blank=True, null=True)
stock_price = models.FloatField(
verbose_name='quarter-end stock price',
blank=True, null=True)
class Meta:
abstract = True
app_label = 'snippets'
Orchid 类定义的第二部分是PeerPerformance,我已经注释掉了我所做的一项更改。 PeerPerformance 的定义是 class PeerPerformance(DividendBookValueMixin),我在这里所做的只是向模型添加 1 个附加字段。 DividendBookValueMixin 是一个抽象模型。
我删除了我的 Orchid 迁移、数据表和相关的 south_migrationhistory 条目。使用class Orchid(models.Model),兰花模型设置得很好。使用class Orchid(PeerPerformance),兰花错误仍然存在。我对PeerPerformance 的所有测试都运行了。我可以很好地读取和保存PeerPerformance 对象。
>>> from peer.models import PeerPerformance as PP
>>> pp1 = PP.objects.get(id=1)
>>> pp1.dividend = 0.135
>>> pp1.save()
DividendBookValueMixin 是PeerPerformance 的父类。对于class Orchid(DividendBookValueMixin),错误仍然存在。我所有的测试都在 DividendBookValueMixin 运行。
有什么想法可以去哪里看吗?
【问题讨论】:
-
如果您有解决方案,请回答您自己的问题并接受。我来到这里,没有看到任何可接受的答案,几乎没有看到您的编辑就离开了——这正是我的问题的原因(但在父类中)。
标签: django django-models