2012-02-07 40 views
1

我怎麼能改寫爲純Django的模型系統 這個AppEngine上特定的代碼(沒有谷歌API)遷移從谷歌應用程序引擎模型純Django的系統

class A(db.Model): 
    name = db.StringProperty(multiline=True) 
    description = db.TextProperty() 
    isAdvanced = db.BooleanProperty() 
    foos = db.ListProperty(db.Key)  
    bar = db.IntegerProperty() 

    def get_foos(self): 
     return db.get(self.foos) 

回答

4

AFAIK,你必須手動完成。謝天謝地,Django可以爲你做大部分工作。

首先,請確保您在settings.py中有適當的數據庫設置。你可以找到詳細的數據庫配置演練here

完成後,運行python manage.py inspectdb > models.py。它會將manage.py的輸出結果轉換爲models.py,然後將其添加到相關的Django應用程序中。你必須仔細檢查它,但它應該花費更少的努力。

此外,從個人經驗來看,如果遇到任何問題,它會讓你知道。例如,Django模型不識別PostgreSQL的money和MySQL的currency字段,所以它會發出models.TextField(),然後是# This is a guess.

編輯: Migrating from Google App Engine to Django

編輯2:我才意識到我也許沒有回答你的問題谷歌搜索它時,就發現了這篇文章。這(大致)是它的樣子,但我仍然建議您運行python manage.py inspectdb > models.py

from django.db import models 

class A(models.Model): 
    name = models.TextField() 
    description = models.TextField() 
    isAdvanced = models.BooleanField() 
    foos = # Dunno, a quick Google search doesn't turn up the equivalent 
    bar = models.IntegerField() 

要得到的multiline屬性爲name,你可能想看看this question從谷歌團體或谷歌一下自己。

+0

for foos它似乎是models.ManyToManyField你能證實嗎? – 2012-02-07 23:14:43

+1

@Christophe我會研究它,但從我對Google的AppEngine文檔的理解,它似乎更像是'models.ForeignKey'/SQL數據類型的列表。 – Edwin 2012-02-08 01:09:52

+0

好的,謝謝。你知道模型是否有簡單的數組(postgres有這種類型) – 2012-02-08 01:23:43

0

據我所知,你不得不重寫所有與數據庫相關的代碼。我處於類似的情況。 :-)

2

埃德溫的回答是一個好的開始。

我一直在使用django-nonrel而不是基本的django。

django-nonrel附帶了一個名爲djangotoolbox的模塊,它爲Google ListProperty提供了一個ListField封裝器。正常Django沒有相同的。