2012-03-01 93 views
1

我們的Django數據模型對象很好地映射到數據庫表。我們想要一種將來自兩個或多個表的數據打包到自定義結構中的方式,以便我們可以輕鬆地將其作爲JSON源提供,具有所有屬性並且具有所需的格式。使用Django數據模型創建值對象的最佳方式是什麼?

在JAVA等其他環境中有點像「值對象」(POJO),在打包和顯示數據時提供了方便。它們應該是暫時的,而不是堅持在數據庫中;但同時包含所有必要的屬性和原始數據類型(在Django世界中稱爲「_meta」)。

感謝您的回覆和建議。

+0

那麼問題是什麼?只需將包含這兩個模型屬性的類作爲實例。 – Sid 2012-03-01 21:49:00

+0

有趣!任何代碼示例? – 2012-03-02 21:08:50

+0

聽起來像你想要使用的是Django Rest Framework。 – 2017-07-24 20:10:05

回答

0

這不適合你嗎?

class Foo(models.Model): 
    field = DoesNotMatter() 

class Bar(models.Model): 
    field = DoesNotMatter() 


class Combined(object): 

    def __init__(self, foo, bar): 
     self.foo_field = foo.field 
     self.bar_field = bar.field 
+0

讚賞你的建議,alex。 後,我們混合的想法到我們下面的代碼塊, 我們得到了錯誤: ... 「複合」對象有沒有屬性「_meta」 ... 這是我們的困境:當數據轉儲沒有'_meta', 生成的JSON包含關鍵字 的字典列表,值全爲str。另一方面,像'Comment'這樣的本地對象可以有更好的(int和其他數據類型...),看起來像這樣:[{「pk」:1,「model」:「blog.comment 「,」fields「:{」body「:」Craps評論「,」post「:2,」author「:」Foo「,」created「:」2012-03-02 10:39:48「}}]] – 2012-03-02 18:12:36

+0

*********** models.py ******************** class Post(models.Model): title =模型。 CharField(MAX_LENGTH = 60) 體= models.TextField() 創建= models.DateTimeField(auto_now_add =真) DEF __unicode __(個體): 返回self.title 類評論(models.Model): 創建= models.DateTimeField(auto_now_add = TRUE) 作者= models.CharField(MAX_LENGTH = 60) 體= models.TextField() 後= models.ForeignKey(POST) 高清__unicode __(個體經營): 返回Unicode (「%s:%s」%(self.post,self.body [:60])) – 2012-03-02 18:15:23

+0

### value test to test class Composite(object): def __init __(self,post,comment): self.post_title = post.title self.post_body = post.body \t self。post_created = post.created \t \t如果評論: \t self.comment_created = comment.created \t self.comment_author = comment.author \t self.comment_body = comment.body \t其他: \t通 – 2012-03-02 18:15:43

0

一旦我放棄了價值對象從Java背景, 結轉的概念,並開始把重點放在什麼我真正想要的,我發現了一個簡單的方式來獲得 這樣的:自定義生成視圖中的字典。 py,基於來自相關模型的數據 。然後添加每個字典到 列表存儲桶並在呈現JSON訂閱源之前使用json轉儲。

相關問題