Django:调试AttributeError:无法设置属性

标签 django django-models

注意:我终于发现了这个错误,所以下面的文字可能只对我有值(value)。简短的回答:我决定根据之前定义为 @property-method 的属性创建一个模型字段。我唯一没有删除 @property-method 的地方是 Orchid 模型。

<小时/>

经过一些调整和查看我的代码后,我突然收到此错误:AttributeError:无法设置属性。我没有更改 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

Orchid 的定义是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),Orchid 模型设置得很好。对于class Orchid(PeerPerformance),Orchid 错误仍然存​​在。我针对 PeerPerformance 的所有测试都运行。我可以很好地读取和保存 PeerPerformance 对象。

>>> from peer.models import PeerPerformance as PP
>>> pp1 = PP.objects.get(id=1)
>>> pp1.dividend = 0.135
>>> pp1.save()

DividendBookValueMixinPeerPerformance 的父类。对于class Orchid(DividendBookValueMixin),错误仍然存​​在。我的所有测试都再次运行 DividendBookValueMixin

有什么想法去哪里看吗?

最佳答案

(在 Linux 上)有时,当您没有项目目录或 virtualenv 目录的读写权限时,就会发生这种情况。确保您对该目录具有适当的读写权限。

关于Django:调试AttributeError:无法设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178565/

相关文章:

Django 应用程序表在管理 UI 中不可见

python - 在 Django 的 View/Template 中引用多个 Model

django - 如何禁用django-registration上的/account/register?

javascript - jstools build - JavaScript 在编译后出现问题

django - 尝试更新模型对象时,类型 'NoneType' 的参数不可迭代

Django - 重写 Model.create() 方法?

python - Django:具有完全相同角色的属性和查询集的 DRY 代码?

python - 具有多个域的 django-allauth

django - 如何使用 CreateView 过滤表单字段之一中的查询集值?

django - 返回模型常见查询的最 Django 式方式