爲了給你一個想解決問題的想法,我將使用一個例子。問題是類之間可能存在多種可能的關係,以及如何在模型文件中表示這些關係。在購物網站,部門可以有一個子部門或一個類別關係。理論上這可能意味着一個部門可能有100個子部門,直到它有一個類別。Django模型類可以有一個關係或另一個?
例如部門/類別/項目,部門/部門/類別/類別/項目,部門/類別/類別/項目...等
我的問題是如何最好地描述Django models.py文件中的這種關係?你會只有兩個外鍵,一個是空的?
爲了給你一個想解決問題的想法,我將使用一個例子。問題是類之間可能存在多種可能的關係,以及如何在模型文件中表示這些關係。在購物網站,部門可以有一個子部門或一個類別關係。理論上這可能意味着一個部門可能有100個子部門,直到它有一個類別。Django模型類可以有一個關係或另一個?
例如部門/類別/項目,部門/部門/類別/類別/項目,部門/類別/類別/項目...等
我的問題是如何最好地描述Django models.py文件中的這種關係?你會只有兩個外鍵,一個是空的?
我會在您的類別和部門模型上創建一個父屬性,以便您可以表示層次結構。
您可以在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')
這將允許您表示部門任意樹下的任意樹類。
你可以使用Django樹實現django-mptt或django-treebeard
我看了一下django-mptt。在使用模板和視圖時,它看起來很有幫助。雖然我不確定這將如何解決外鍵指向兩個不同的類,部門或類別之一的問題。據我所知,使用mptt時需要將它們結合在一起。 – Calum 2011-04-14 19:15:00
完美,看起來像普通的外鍵就是我一直在尋找!謝謝:) – Calum 2011-04-14 17:17:08