2012-05-01 49 views

回答

0

從Django上Options對象_name_map屬性的人口django.db.models.options,看起來它是依賴於你所使用的字段名是否是與建立一個related name創建了Model或名稱聲明的字段。我怕我不熟悉相關名稱的東西,但代碼如下:

for f, model in self.get_all_related_m2m_objects_with_model(): 
    cache[f.field.related_query_name()] = (f, model, False, True) 
for f, model in self.get_all_related_objects_with_model(): 
    cache[f.field.related_query_name()] = (f, model, False, False) 
for f, model in self.get_m2m_with_model(): 
    cache[f.name] = (f, model, True, True) 
for f, model in self.get_fields_with_model(): 
    cache[f.name] = (f, model, True, False) 
for f in self.virtual_fields: 
    if hasattr(f, 'related'): 
     cache[f.name] = (f.related, None if f.model == self.model else f.model, True, False) 

所以,你只能看到前兩個for循環填充緩存與具有directFalse和條目他們使用related_query_name。也許別人可以從中發現更多的信息,或者更可能在你問了以後的半年中,你已經明白了:)