2013-02-19 253 views
2

在我的主類模型交易中,我有一些字段描述,價格,date_created等。我現在必須添加一些字段有子字段。例如,我正在嘗試爲交易添加一個年齡段。這個年齡段還有子場(比如score_for_kid,score_for_baby,score_for_old等),我想從管理員那裏編輯這些分數。Django:模型字段內的子字段

這裏是我的models.py:

class Deals(models.Model): 
    description = models.TextField() 
    price = models.DecimalField(max_digits=7, decimal_places=2) 
    url = models.URLField(verify_exists=False) 
    currency = models.CharField(max_length=3) 
    created_date = models.DateField(auto_now_add=True) 

    kid_score = models.IntegerField(max_length=2,default=0) 
    teenager_score = models.IntegerField(max_length=2,default=0) 
    youth_score = models.IntegerField(max_length=2,default=0) 
    old_score = models.IntegerField(max_length=2,default=0) 

我不想存儲所有這些子域(約20-25以4個不同字段)的模型,而不是年齡字段連接到這些子域。 ManyToManyField會爲此工作嗎?

潛在的要求是,當用戶在瀏覽器上選擇一個子字段(比如孩子)時,會顯示具有較高孩子分數的所有對象。

我對Django很新,任何幫助都會很棒。謝謝。

回答

0

如果我正確理解您的問題,您需要使用ForeignKey字段。

class Deals(models.Model): 
    description = models.TextField() 
    price = models.DecimalField(max_digits=7, decimal_places=2) 
    #... 
    age = models.ForeignKey(Age) 

class Age(models.Model): 
    kid_score = models.IntegerField(max_length=2,default=0) 
    teenager_score = models.IntegerField(max_length=2,default=0) 
    #... 

請仔細閱讀docs on Models。您可能還會發現在關係數據庫/基本SQL上進行一些閱讀很有用。

當您在django管理員中編輯對象時,您可能需要使用InlineModelAdmin類。

UPDATE

重讀你的問題,這聽起來像你可能只是想顯示/隱藏在主交易模型中,這些附加字段。如果是這種情況,那麼你想在admin中使用字段集,並使用類'collapse'。 docs中有一個例子。

如果你想讓每個Deal記錄有多個kid_score的關聯,那麼你需要一個外鍵。如果每個Deal只能有一個kid_score,那麼你需要在主模型中保留kid_score(和其他)字段(如果這很混亂,那麼一定要閱讀sql /關係數據庫)。

+0

感謝艾丹,我實際上只希望每個交易只有一個kid_score(和其他分數),但後來我認爲有25個字段會使我的模型過於複雜。在上面的代碼中,我只有4個這樣的字段,但我有更多(不同的字段)。我不確定爲什麼在我的模型中保留所有這25個字段會更好,而不是年齡等的外鍵。 另外,在我的年齡模型類中放置'age = models.ForeignKey(Deals)'對我來說效果更好。儘管非常感謝這個概念,但一旦我獲得了它,它就非常流暢。 – 2013-02-19 15:06:06

+0

如果是這樣的話,那麼你真的需要把所有的東西放在一個模型上。雖然您可以創建OneToOne字段,但我不認爲這是正確的解決方案,因爲您的所有交易對象都有分數。你只需要顯示你的html中隱藏的字段。這對於ModelForms/Django Admin來說並不困難。 – 2013-02-19 18:43:48

+0

是的,我同意,因爲每個Deal對象只有一個kid_score等,所以最好將該字段放入Deal模型中。但是,正如我告訴你的,我有很多這樣的領域(年齡6,關係等10),總共可以達到30多個這樣的領域。具有30-40個字段的模型不會使查詢或其他複雜操作運行緩慢嗎?有沒有更好的方法來做到這一點,並使其更快? – 2013-02-19 21:43:38