2017-01-13 13 views
3

あなたはあなたのモデルにある外来キーが本当にm2mでなければならないことを認識しており、モデルを提供するためにプラクティスを採用しています。 ですから、このコードで終わる:Django ManyToManyField: 'function'オブジェクトにサブスクリプトがありません

class Group(models.Model): 
    members = models.ManyToManyField(Person, models.CASCADE) 

あなたはいくつか他のものを「修正」と突然あなたがやろうすべてとバックトレースのこの尾で終わる:

File "/usr/local/lib/python3.5/site-packages/django/db/models/base.py", line 157, in __new__ 
    new_class.add_to_class(obj_name, obj) 
File "/usr/local/lib/python3.5/site-packages/django/db/models/base.py", line 316, in add_to_class 
    value.contribute_to_class(cls, name) 
File "/usr/local/lib/python3.5/site-packages/django/db/models/fields/related.py", line 1516, in contribute_to_class 
    elif self.remote_field.is_hidden(): 
File "/usr/local/lib/python3.5/site-packages/django/db/models/fields/reverse_related.py", line 144, in is_hidden 
    return bool(self.related_name) and self.related_name[-1] == '+' 
TypeError: 'function' object is not subscriptable 

何が起こっていますに?

+3

'on_delete'をキーワードargとして宣言する練習を採用することがあります。 – Sayse

+1

@Sayseは正しいです。私は今からこの練習を採用していますが、この問題については1時間だけ焼き尽くしています。 –

答えて

3

ManyToManyFieldとForeignKeyのメソッドシグネチャは同一ではありません。

> /usr/local/lib/python3.5/site-packages/django/db/models/fields/related.py(1513)contribute_to_class() 
-> if self.remote_field.symmetrical and (
(Pdb) p self.remote_field.related_name 
<function CASCADE at 0x80645b400> 

今、あなたのモニターにポストに入れて、原因:のManyToManyField第二位置引数は、実際には、デバッガで見ることができるようにあなたがrelated_nameにmodels.CASCADEを渡してしまった意味「related_name」であります3ヶ月後にもう一度やります。

+1

AAAARGH !!間違いなくポストイットに貼ってください。私はこれらのヒープを書いていますが、まだ呼び出されたものが関連する名前としてどのように渡されているかを理解しようとしているdjangoのコードをたどってこのエラーで1時間を無駄にしています。代わりに、**は常に位置指定ではなくon_deleteにkwargを使用します** –

関連する問題