2013-09-26 55 views
0

的問題很簡單: 使用爲什麼Django沒有序列化完整的模型關係?

serialize("json", queryset) 

在例如當我知道,Django會不序列相關機型:如果我有一本書的作者:

class Book(models.Model): 
    author = models.ForeignKeyField(Author) 

當序列化,我得到Books字段,但只有作者的PK。 這是爲什麼?這是一個設計決定嗎?如果是這樣,爲什麼?

+0

它獲取數據庫字段。相應的數據庫條目存儲爲'ForeignKey'字段的'id' – karthikr

+0

就像@ karthikr所說的,它的db相關。查看dumpdata命令,該命令採用「--natural」參數,通過ContentTypes框架描述關係的更詳細的方式 –

+0

dbrelated是什麼意思?我期待着一些「很難反序列化」的東西。此外,如果這個關係是多對多的,那麼它就有智能去查看相應的表格。 – Alvaro

回答

1

它可以使用自然鍵,自定義管理器和get_by_natural_key()。 Django doc有完整的解釋,請read here。我寧願不復制粘貼在這裏的一切。

通過使用這種方法,你可以把經常系列化這樣的 -

{ 
    "pk": 1, 
    "model": "store.book", 
    "fields": { 
     "name": "Mostly Harmless", 
     "author": 42 
    } 
} 

爲了這一點 -

{ 
    "pk": 1, 
    "model": "store.book", 
    "fields": { 
     "name": "Mostly Harmless", 
     "author": ["Douglas", "Adams"] 
    } 
} 
+0

我已經閱讀了文檔,我並不是說它不起作用,但它肯定不是直觀的。例如:現在你需要作者的家鄉......你做什麼? +1,因爲文檔是學習的最佳地方 – Alvaro

+1

@Alvaro您修改'natural_key()'方法以返回家鄉,然後修改'get_by_natural_key()'方法以使作者使用所有3個屬性。 –