注意:我终于找到了错误,所以下面的文本或许只对我有用。简短的回答:我决定从我之前定义为@property-method
的属性中创建一个模型字段。我没有删除@property-method
唯一的地方是在兰花模型。Django:调试AttributeError:无法设置属性
经过一番调整和戳我的代码,我突然得到这个错误: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
运行。
任何想法在哪里看?