2017-01-25 20 views
2

を持っていない私は、各オートマトンのために次のPythonスクリプトからグラフを描画するために私のDjangoのモデルとgraphvizを使用しています:Graphvizの - はAttributeError:オブジェクトが属性「パーティションの

alphabets = automata.alphabet_set.all() 
states = automata.states_set.all() 
transitions = automata.transition_set.all() 
dot = gv.Graph() 
for state in states: 
    dot.node(state.state, state.state) 
for transition in transitions: 
    dot.edge(transition.current_state, transition.next_state, transition.input) 
dot.render(automata.id + '.gv', view=True) 

そして、これらは私のモデルです。

class Automata(models.Model): 
    pass 

class Alphabet(models.Model): 
    alphabet = models.CharField() 
    automata = models.ForeignKey(Automata, on_delete = models.CASCADE) 

class States(models.Model): 
    state = models.CharField() 
    automata = models.ForeignKey(Automata, on_delete = models.CASCADE) 

class Transition(models.Model): 
    current_state = models.ForeignKey(States, on_delete = models.CASCADE, related_name = 'current') 
    input = models.ForeignKey(Alphabet, on_delete = models.CASCADE) 
    next_state = models.ForeignKey(States, on_delete = models.CASCADE, related_name = 'next') 
    automata = models.ForeignKey(Automata, on_delete = models.CASCADE) 

が、毎回、私は次のエラーを取得する私のスクリプトを実行しよう:

Traceback (most recent call last): 
    File "make_graph.py", line 36, in <module> 
    dot.edge(transition.current_state, transition.next_state, transition.input) 
    File "/home/nids/automata/auto/lib/python3.5/site-packages/graphviz/dot.py", line 116, in edge 
    tail_name = self.quote_edge(tail_name) 
    File "/home/nids/automata/auto/lib/python3.5/site-packages/graphviz/lang.py", line 63, in quote_edge 
    node, _, rest = identifier.partition(':') 
AttributeError: 'States' object has no attribute 'partition' 

私は単純にやるならば、私は何のエラーを持っていないことを知っ:dot.edge('A', 'B', 'edge label')

答えて

2

graphvisコードは、それに渡される文字列ではなく、Statesオブジェクト(モデル)を期待しています。

これはsource codequote_edge機能で確認できます。

+0

私はそれを逃したとは思わない。ありがとう!それを 'dot.edge(transition.current_state.state、transition.next_state.state、transition.input.alphabet) 'に置き換えて修正しました。 – Meryem

+0

Sweet!うれしい私は助けることができた! – wpercy

関連する問題