2015-10-01 17 views
16

ho modelli contenuti in questo modo:Django 1.8 KeyError: 'manager' sul rapporto

class Post(models.Model): 
    name = models.CharField(max_length=10) 

class Comment(models.Model): 
    post = models.ForeignKey(Post,related_name='comments') 
    name = models.CharField(max_length=10) 

E quando voglio ottenere tutti i commenti da un post somepost.comments() ottengo il seguente errore:

>> somepost.comments() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "a_path/django/db/models/fields/related.py", line 693, in __call__ 
    manager = getattr(self.model, kwargs.pop('manager')) 
KeyError: 'manager' 
+0

questo mi ha fatto incazzare per un tempo imbarazzante. anche se in parte perché tab-completion ti dà 'somepost.comments (' – andorov

+0

Ho postato anche questo perché google non risulta utile per il criptico KeyError: 'manager'' – andorov

risposta

20

Dovrebbe essere somepost.comments.all().

somepost.comments restituisce un set di query. all accede agli oggetti in esso contenuti.

0

Deve essere somepost.comment_set.all() _set viene utilizzato per la mappatura inversa in django models.

+1

Parzialmente errato in questo contesto. Quando usi 'related_name' sul 'ForeignKey()' questo sarà usato * invece di * ' _set'. Quindi, in questo caso è solo' somepost.comments', non 'somepost.comments_set'. – Thor

+0

questo è vero ma se related_name non è definito o altrimenti può essere utilizzato anche il metodo _set. –

Problemi correlati