2014-10-07 87 views
0

我必須定義一個模型,其中一個域依賴於另一個域。定義相關的Django模型域

我是存儲商品交易,商品的等級根據商品的種類而不同。例如,如果我存儲煤炭和鐵貿易,則需要指定交易每個等級的數量。

Example: 

{'Grade–I':500, 'Grade-II':1000, 'Washery-Grade-I':0, 'Washery-Grade-II':0, 'Washery-Grade-III':100} 

{'Fe 65%+':10, 'Fe 60-65%':55,'Fe 55-60%':0} 

一種可能的方法是存儲所述商品類型與選擇一個CharField和序列化的數量級,並存儲它作爲一個JSONField。

class TradeRetail (models.Model): 
     commodity_type = models.CharField(max_length=5, choices=(('CO','COAL'),('IO','IRON-ORE'),('WTI','WTI'),), blank=False) 
     grade_quantity = JSONField() 

我的問題是:

一)這是創建模型的最巧妙的方法?

b)如何定義grade_quantity和commodity_type之間的關係以生成適當的表單以獲取用戶輸入?

c)我寫的所有自定義驗證是否都在clean()函數中?

回答

1

如果我得到正確的問題,我認爲它會更「符合Django」來定義兩個模型:一個包含commodity_type,另一個包含grade_quantity。然後,您可以在commodity_type中創建一個外鍵以將其與grade_quantity關聯。 作爲一般的文檔,你可以閱讀https://docs.djangoproject.com/en/1.7/topics/db/examples/one_to_one/

例:

class Commodity (models.Model): 
    type = models.CharField(...) 
    quantity = models.ForeignKey('Commodity') 

class Grade (models.Model): 
    type = models.<your type adapted to the grade quantity field> 

警告:我還沒有測試這個確切的例子,但它看起來像你想達到的目標。看看網頁https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

對於您的問題:

一)有關如何創建模型的提示,看到OneToOne例子第一環節。通常,添加一個str(self)函數可以正確顯示模型實例的名稱。請仔細閱讀Django文檔中的示例,以獲得有關如何正確編寫模型的提示(通常先定義字段,然後定義模型的方法,並且通常使用方法)。

b)ForeignKey字段是兩個模型(oneToOne)之間的鏈接。 ManyToManyField字段中還存在ManyToMany鏈接(請參閱https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

c)通常情況下:是。我提出的例子可能需要你用不同的方式寫你已經開發的驗證。

+0

謝謝我採用的方法與您在此提出的方法非常相似。 – hkalra 2014-10-26 10:25:15