2010-04-20 86 views
0

我第一次使用Django和StackOverflow可以做一些幫助。幫助Django模型關係和管理屏幕

平臺有許多類別,一個類別可以屬於許多平臺。產品屬於一個平臺和一個或多個平臺類別。

所以這是我至今對我的模型:

class Category(models.Model): 
    name = models.CharField(max_length=50, unique=True) 
    is_active = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.name 

class Platform(models.Model): 
    name = models.CharField(max_length=50, unique=True) 
    is_active = models.BooleanField(default=True) 
    categories = models.ManyToManyField(Category) 

    def __unicode__(self): 
     return self.name 

class Product(models.Model): 
    name = models.CharField(max_length=50) 
    is_active = models.BooleanField(default=True) 
    platform = models.ForeignKey('Platform') 

    def __unicode__(self): 
     return self.name 

    class Meta: 
     unique_together = ("platform", "category") 

所有看起來不錯的shell時,但我不能完全理解是我如何縮小類別下基於平臺當我創建一個新產品?理想情況下,我可以在管理員屏幕中使用這個工具嗎?

這個模型看起來不錯,或者我可以做得更好嗎?

+1

您是否錯過了產品和類別之間的關係?你在問題和unique_together中提到它,但你沒有產品 – Garethr 2010-04-20 09:08:46

回答

0

我有一種感覺,你問的是,使用管理界面並創建一個新Product模型時,你希望能夠選擇一個Platform然後,能夠選擇一個類別,其中由給出的類別選項只有那些已經與選定的Platform關聯。

我的朋友比看起來更難。爲什麼是內置到django沒有服務器「往返」,因此在選擇Platform之後,Web應用程序會跳轉到服務器,收集Category的選項,然後顯示給您。默認情況下沒有這樣的選項(儘管如果這個選項最終成爲標準Django包的一部分,我不會感到驚訝)。

但是,有一種方法可以通過在javascript/ajax中實現它來完成,根據您的經驗,這可能會有一定的挑戰性。

好消息是,與在Django中最常見的任務一樣,通常有一個社區應用程序正在開發或已經可以滿足需求。在這種情況下,它可能值得檢查django-ajax-filtered-field

+0

上的類別屬性啊,好吧,我想盡可能多的謝謝你的鏈接。 可能需要重新考慮我的模型了一下。我需要能夠獲得平臺內的所有類別。還需要計算具有該類別的產品數量。 – JMWhittaker 2010-04-20 09:46:06