2012-09-17 30 views
0

相關對象的關係領域說我有這兩個型號:發現在Django

class Project(models.Model): 
    name = models.CharField('Name', max_length=250) 

class ProjectUpdate(models.Model): 
    project = models.ForeignKey(Project) 
    title = models.CharField('Title', max_length=250) 

比方說,在我的代碼我有一個項目實例工作,但我不能假設我的對象與之一起工作的是一個項目實例。我只能假設它有一個或多個相關的模型,我需要處理它。

現在我設法使用相關管理器(project_obj.projectupdate_set)來獲取相關的類名稱。但我現在需要的是知道哪個領域創造了關係。在這種情況下,這將是ProjectUpdate上的「項目」字段。

在那裏我找到一個參考它在相關管理者的core_filters屬性,它給我的唯一的地方:{「project__id」:1}

我大概可以利用這一點,但給人的感覺並不對。

有什麼想法?

編輯

這裏的RelatedManager的屬性:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__', '_copy_to_model', '_db', 
'_inherited', '_insert', '_set_creation_counter', '_update', 'add', 
'aggregate', 'all', 'annotate', 'bulk_create', 'clear', 'complex_filter', 
'contribute_to_class', 'core_filters', 'count', 'create', 'creation_counter', 
'dates', 'db', 'db_manager', 'defer', 'distinct', 'exclude', 'exists', 
'extra', 'filter', 'get', 'get_empty_query_set', 'get_or_create', 
'get_prefetch_query_set', 'get_query_set', 'in_bulk', 'instance', 'iterator', 
'latest', 'model', 'none', 'only', 'order_by', 'prefetch_related', 'raw', 
'remove', 'reverse', 'select_for_update', 'select_related', 'update', 'using', 
'values', 'values_list'] 

回答

1

一種解決方法是添加了related_name在:

project = models.ForeignKey(Project, related_name='project') 

然後project_obj.project葉難怪上ProjectUpdate的哪個字段與哪個相關。所以通常添加一個related_name,它與該字段具有相同的名稱。

+0

也許這是因爲我使用django 1.4 ..但是我得到這個:AttributeError:'RelatedManager'對象沒有屬性'query_field_name'。我編輯了我的帖子以添加相關管理器的dir()..(太長以備不時之需) –

+0

答案是錯誤的。我的回答只適用於M2M關係。 – thikonom