2010-04-22 21 views
5

J'ai un modèle qui peut être attaché à d'autres modèles. Je crée une relation générique avec ce modèle dans un autre modèle.Le champ de relation générique de Django signale que all() obtient un argument de mot clé inattendu quand aucun argument n'est passé

flags = generic.GenericRelation(Flag) 

J'essaie d'obtenir des objets de cette relation générique comme ceci:

self.flags.all() 

Il en résulte l'exception suivante:

>>> obj.flags.all()   
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 105, in all 
    return self.get_query_set()                
    File "/usr/local/lib/python2.6/dist-packages/django/contrib/contenttypes/generic.py", line 252, in get_query_set 
    return superclass.get_query_set(self).filter(**query)               
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 498, in filter      
    return self._filter_or_exclude(False, *args, **kwargs)               
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 516, in _filter_or_exclude   
    clone.query.add_q(Q(*args, **kwargs))                   
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1675, in add_q     
    can_reuse=used_aliases)                      
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1569, in add_filter   
    negate=negate, process_extras=process_extras)                 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1737, in setup_joins   
    "Choices are: %s" % (name, ", ".join(names)))                 
FieldError: Cannot resolve keyword 'object_id' into field. Choices are: content_type, flag, id, nestablecomment, object_pk, timestamp, user 
>>> obj.flags.all(object_pk=obj.pk) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: all() got an unexpected keyword argument 'object_pk' 

Qu'est-ce que je fait de mal?

Répondre

7

Vous devez définir object_id_field et content_type_field lors de la création GenericRelation:

flags = generic.GenericRelation(Flag, object_id_field="object_pk", content_type_field="content_type") 
+0

ne savais pas que j'utilisais des valeurs non définies par défaut pour ct_field et fk_field. Merci. – Joshua

+0

super article! Merci – Ron