在Django項目的關係,我想基本上代表了一個城市的環境:一對夫婦的建築和街道,在它們之間移動的可能性。爲了實現這一點,我挑選的graph表示:每個節點表示房間或那條道,並且每個邊緣表示兩個節點之間行進的可能性。訪問父母從兒童模型
所以我有一個第一應用graphs
具有以下Graph
,Node
和Edge
型號:
class Graph(models.Model):
label = models.CharField(max_length=200)
class Node(models.Model):
graph = models.ForeignKey(Graph)
# some methods
class Edge(models.Model):
node_a = models.ForeignKey(Node, related_name='node_a')
node_b = models.ForeignKey(Node, related_name='node_b')
# some methods
在這些抽象的概念之上,我想建立更具體的:圖形實際上是一個是地圖,節點可以在地圖中定義具有定義的座標的街道或房間,並且邊緣表示兩個節點之間的路徑。在第二cities
應用程序,我主要有:
from graphs.models import *
class Map(Graph):
# ...
class Element(Node):
# ...
class Path(Edge):
# ...
這是繼承來的方式和在那裏我失去了我自己用的Django模型的關係。
1/I希望充實Element
和Map
之間現有ForeignKey
添加座標(x,y)時,因爲一個元素具有在地圖空間中的特定位置。但我不確定這是可能的。我應該定義一個新的關係(如it's been done here)?在建築方面它會不會很糟糕?如果這是要做的事情,我該如何將額外的數據(即座標)添加到這個關係? (我知道m2m-through,我不需要m2m關係就是我需要的)。
2 /通過繼承,一個Element
(這是一個Node
)屬於Map
(這是一個Graph
),但顯然我不能做到這一點:
>>> map = Map.objects.get(id=1) # suppose it exists and has a few Elements
>>> map_elements = map.element_set().all()
AttributeError: 'Map' object has no attribute 'element_set'
有沒有辦法,我可以告訴Django使用Map
的父node_set
找到它的元素?
或者,也許我會走錯路了,應該放棄這一整個產業的想法?我非常喜歡它,因爲它允許我在不同的應用程序中保留所有綁定到圖形操作的邏輯。
我目前的假設:我將不得不在'Map'和'Element'之間重新定義FK,可能需要一箇中間位置模型,保存座標... – Anto 2014-08-29 15:12:11
什麼是你需要「圖表」模型類嗎? – 2014-08-29 15:41:05
我主要用它來放置'count_nodes/edges'等方法,這也是我的渲染器獲取它的表示的對象。 – Anto 2014-08-29 15:44:43