gpt4 book ai didi

django - 属性错误: 'NoneType' object has no attribute 'attname' (Django)

转载 作者:行者123 更新时间:2023-12-01 16:30:33 25 4
gpt4 key购买 nike

我有一个相当复杂的模型,第一次调用 MyModel.objects.create(**kwargs) 失败并显示

AttributeError: 'NoneType' object has no attribute 'attname'

堆栈跟踪像这样深入(在 Django 1.11 中)

django/db/models/manager.py:85: in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
django/db/models/query.py:394: in create
obj.save(force_insert=True, using=self.db)
django/db/models/base.py:807: in save
force_update=force_update, update_fields=update_fields)
django/db/models/base.py:837: in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
django/db/models/base.py:889: in _save_table
pk_val = self._get_pk_val(meta)
django/db/models/base.py:644: in _get_pk_val
return getattr(self, meta.pk.attname)
django/db/models/query_utils.py:114: in __get__
val = self._check_parent_chain(instance, self.field_name)
django/db/models/query_utils.py:131: in __check_parent_chain
return getattr(instance, link_field.attname)

模型定义对我来说看起来不错。我已经检查了 create 调用的所有参数都正是我想要的。

我不热衷于通过剥离模型来寻找问题,因为模型太复杂了。 (我的所有其他模型,其中许多相似,似乎工作正常。)

那么什么可能导致这个奇怪的消息呢?

最佳答案

花了大约 90 分钟才找到这个。我是在首先从模型中取出抽象超模型、然后是所有关系字段、然后是除一个之外的所有数据字段,直到只剩下一个 IntegerField 后才发现它的。 create 仍然不起作用。

那时,我在完全相同的测试上下文中对其他一些简单模型类 MyModel2 调用了 create 。它起作用了(就像惯用的微风一样)。

那么 MyModel 到底有什么特别之处??

然后我突然意识到:MyModel 有一个 __init__ 方法;我的大多数其他型号都没有。所以看看那个。敲敲你的额头:我只是忘记了强制性的(Python 3 风格)

super().__init__(*args, **kwargs)

寓意:不要忘记这一点,否则您可能会遇到非常严重的错误消息。

(注:如果您不喜欢这篇文章的风格,我很抱歉。这是我需要的治疗性写作。)

关于django - 属性错误: 'NoneType' object has no attribute 'attname' (Django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46360477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com