2017-09-22 24 views
2

を持っていない私はMyModel.objects.create(**kwargs)への最初の呼び出しがはAttributeError:「NoneType」オブジェクトが属性「attname」(ジャンゴ)

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

で失敗したため、かなり複雑なモデルを持っているスタックトレースは次のようにダウンダイブ(ジャンゴで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コールのすべてのパラメータをチェックしています。

私はモデルが非常に複雑であるため、問題を見つけるためにモデルを取り除くことに熱心ではありません。 (私の他のすべてのモデル、それらの多くは似て、正常に動作するように見えます)

この奇妙なメッセージの原因は何でしょうか?

答えて

2

これを見つけるのに約90分かかりました。 私は最初抽象スーパーモデル、次に全ての関係フィールド、次にすべてが1つのデータフィールドをモデルから取り除いた後で、ただ1つだけIntegerFieldが残されるまでそれを見つけました。 createはまだ動作しませんでした。

その時点で私はcreateを他の単純なモデルクラスMyModel2と全く同じテストコンテキストで呼びました。それは働いた(慣用的な風など)。

だから何が特別だったのですかMyModel ??

そしてそれは私に浮かんだ:MyModel__init__メソッドを持っていた。私の他のモデルのほとんどはそうしなかった。だからそれを見てください。そして、あなたの額を強打:このことを忘れてはいけないか、あなたは本当にタフなエラーメッセージに苦しむことがあります。道徳

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

は、私は単純に(Pythonの3スタイルで)義務を忘れていました。

(注:。。あなたがこの記事のスタイルが気に入らない場合、私は申し訳ありませんそれは私のための治療書き込みを必要とした)

関連する問題