2011-04-14 69 views
1

爲了給你一個想解決問題的想法,我將使用一個例子。問題是類之間可能存在多種可能的關係,以及如何在模型文件中表示這些關係。在購物網站,部門可以有一個子部門或一個類別關係。理論上這可能意味着一個部門可能有100個子部門,直到它有一個類別。Django模型類可以有一個關係或另一個?

例如部門/類別/項目,部門/部門/類別/類別/項目,部門/類別/類別/項目...等

我的問題是如何最好地描述Django models.py文件中的這種關係?你會只有兩個外鍵,一個是空的?

回答

1

我會在您的類別和部門模型上創建一個父屬性,以便您可以表示層次結構。

您可以在Department模型上使用ForeignKey以允許他們指向其他部門,並且您可以在Category模型上使用GenericKey以允許其指向部門或其他類別。例如:

class Department(models.Model): 
    ... 
    parent = models.ForeignKey('self', ...) 

class Category(models.Model): 
    ... 
    parent_content_type = models.ForeignKey(ContentType) 
    parent_id   = models.PositiveIntegerField() 
    parent    = generic.GenericForeignKey('parent_content_type', 'parent_id') 

這將允許您表示部門任意樹下的任意樹類。

+0

完美,看起來像普通的外鍵就是我一直在尋找!謝謝:) – Calum 2011-04-14 17:17:08

0

你可以使用Django樹實現django-mpttdjango-treebeard

+0

我看了一下django-mptt。在使用模板和視圖時,它看起來很有幫助。雖然我不確定這將如何解決外鍵指向兩個不同的類,部門或類別之一的問題。據我所知,使用mptt時需要將它們結合在一起。 – Calum 2011-04-14 19:15:00

相關問題