Lut*_*elt 8 django django-models
我有一个相当复杂的模型,第一次调用MyModel.objects.create(**kwargs)失败了
AttributeError:'NoneType'对象没有属性'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)
Run Code Online (Sandbox Code Playgroud)
模型定义对我来说没问题.我检查了create调用的所有参数正是我想要的.
我并不热衷于剥离模型以找到问题,因为模型非常复杂.(我的所有其他模型,其中许多类似,似乎工作正常.)
那么什么可能导致这个奇怪的消息?
Lut*_*elt 14
找到这个花了大约90分钟.我只是在我从模型中取出抽象超模,然后是所有关系字段,然后是一个只有一个数据字段,直到只剩下一个时才找到它IntegerField.在create仍然没有奏效.
那时我在完全相同的测试环境中调用create了一些其他简单的模型类MyModel2.它起作用(就像惯用的微风).
那么到底有什么特别之处MyModel?
然后我MyModel突然意识到:有一种__init__方法; 我的大多数其他型号都没有.所以看看那个.并敲打你的额头:我只是忘记了强制性(在Python 3风格)
super().__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
道德:不要忘记这一点,否则你可能会遇到一个非常棘手的错误信息.
(注意:如果你不喜欢这篇文章的风格,我很抱歉.这需要我的治疗写作.)
小智 5
至于我,我有:
def __init__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
代替
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
所以我输错__init__了__str__
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |