2010-04-22 5 views
5

Ho un modello che può essere collegato ad altri modelli.Il campo della relazione generica di Django riporta che all() sta ottenendo argomenti di parole chiave inattese quando non viene passato alcun argomento

class Attachable(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_pk = models.TextField() 
    content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk") 

    class Meta: 
     abstract = True 

class Flag(Attachable): 
    user = models.ForeignKey(User) 
    flag = models.SlugField() 
    timestamp = models.DateTimeField() 

Sto creando una relazione generica con questo modello in un altro modello.

flags = generic.GenericRelation(Flag) 

cerco di ottenere gli oggetti da questa relazione generica in questo modo:

self.flags.all() 

Il risultato è il seguente eccezione:

>>> 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' 

Che cosa ho fatto di male?

risposta

7

è necessario definire object_id_field e content_type_field durante la creazione di GenericRelation:

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

non mi rendevo conto che stavo usando valori non predefiniti per ct_field e fk_field. Grazie. – Joshua

+0

ottimo post! Grazie – Ron

Problemi correlati