2010-04-22 13 views
5

Tôi có một mô hình có thể được gắn vào các mô hình khác.Trường quan hệ tổng quát Django báo cáo rằng tất cả() đang nhận được đối số từ khóa không mong muốn khi không có arg nào được thông qua

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() 

Tôi đang tạo mối quan hệ chung với mô hình này trong một mô hình khác.

flags = generic.GenericRelation(Flag) 

tôi cố gắng để có được các đối tượng từ mối quan hệ chung này như sau:

self.flags.all() 

Điều này dẫn đến ngoại lệ sau đây:

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

Tôi đã làm gì sai?

Trả lời

7

Bạn cần phải xác định object_id_fieldcontent_type_field khi tạo GenericRelation:

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

Không nhận ra tôi đã sử dụng các giá trị mặc định không cho ct_field và fk_field. Cảm ơn. – Joshua

+0

bài đăng tuyệt vời! cảm ơn – Ron

Các vấn đề liên quan