我將當前使用Propel ORM的web項目轉換爲django項目。如何爲Django的數據模型編寫此類(從Propel的YML格式轉換而來)
我的第一項任務是將模型模式「移植」到django的模型中。
我已閱讀django文檔,但他們似乎沒有足夠的細節。典型的例子,怎麼可能我「口」在行走YML模式定義的(人爲)表如下:
demo_ref_country:
code: { type: varchar(4), required: true, index: unique }
name: { type: varchar(64), required: true, index: unique }
geog_region_id: { type: integer, foreignTable: demo_ref_geographic_region, foreignReference: id, required: true, onUpdate: cascade, onDelete: restrict }
ccy_id: { type: integer, foreignTable: demo_ref_currency_def, foreignReference: id, required: true, onUpdate: cascade, onDelete: restrict }
flag_image_path: { type: varchar(64), required: true, default: ''}
created_at: ~
_indexes:
idx_f1: [geog_region_id, ccy_id, created_at]
_uniques:
idxu_f1_key: [code, geog_region_id, ccy_id]
這裏是我的(微弱)試圖至今:
class Country(models.Model):
code = models.CharField(max_length=4) # Erm, no index on this column .....
name = models.CharField(max_length=64) # Erm, no index on this column .....
geog_region_id = models.ForeignKey(GeogRegion) # Is this correct ? (how about ref integrity constraints ?
ccy_id = models.ForeignKey(Currency) # Is this correct?
flag_image_path = models.CharField(max_length=64) # How to set default on this col?
created_at = models.DateTimeField() # Will this default to now() ?
# Don't know how to specify indexes and unique indexes ....
[編輯]
對於所有那些暗示我RTFM,我理解你的挫折。只是這個文檔對我來說不是很清楚。這可能是一種Pythonic的文檔方式 - 但是來自C++背景,我覺得可以改進文檔以使來自不同語言的人更容易訪問。
案例:該文檔僅說明ctor中的類名和**選項參數,但不會告訴您可能的選項是什麼。
例如類CharField(MAX_LENGTH =無,[**選項])
有一個線進一步向上給出的可允許的選擇,這適用於所有的字段類型的列表的文件中。
然而,在形式提供的選項:
Field.optionname
類屬性和構造函數參數之間的(顯然隱含的)鏈接是我不清楚。看起來,如果一個類有一個屬性foo,那麼這意味着你可以將一個名爲foo的參數傳遞給它的構造函數。這種觀察是否適用於所有Python類?
感謝您的摘錄。現在我可以看到它們如何融合在一起。 – skyeagle 2010-10-06 10:49:37
是否有辦法在插入和刪除(即級聯等)上強制實施RI(參照完整性),就像我在Propel YML模式文件中所做的一樣? – skyeagle 2010-10-06 12:02:49
是unique_together關鍵字嗎?如果是這樣,如果在一個表上有多個集羣(多鍵)索引會發生什麼? – skyeagle 2010-10-06 12:28:49