2012-01-19 19 views
1

モデルのManyToManyフィールドにDjango管理者UIに保存された項目を自動的に追加したいとします。ただし、()を呼び出すmodel.many2manyfield.add私のDjangoアプリケーションのmodels.py黙っ カスタムDjango管理クラスは、モデルのManyToManyフィールドにアイテムを追加できますか?

を失敗している

​​

私のDjangoアプリケーションのadmin.py

graphite_util.pyから
from models import Dashboard 
... 
class DashboardAdmin(GraphAdmin): 
    def save_model(self, request, dashboard, form, change): 
     dashboard.save() 
     graphite_util.sync_dashboard_graphs(dashboard) 

... 
admin.site.register(Dashboard, DashboardAdmin) 

def sync_dashboard_graphs(dashboard): 
    print "Syncing %s " % dashboard 

    ... 
      graph = None 
      try: 
       graph = Graph.objects.get(url=url) 
      except Graph.DoesNotExist: 
       graph = Graph() 
       graph.url = url 
       graph.save() 
      print "adding graph %s to dashboard %s" %(graph, dashboard) 
      dashboard.graphs.add(graph) #TODO: why does this fail silently? 

は私が何とか違法何をしたいですか?もしそうなら、他の選択肢はありますか?

ありがとうございます!

答えて

1
原則として

それが動作するはずです。しかし、あなたのコードにはいくつかの矛盾があります。たとえば、urlに基づいてグラフを参照しているとします。コードの一部を編集したので、不足している部分に変数を作成した可能性がありますが、その情報がどこから得られたのかは分かりません。この方法ではrequestにアクセスすることはできません。

ただし、要求が提供されていますので、それはsave_modelで呼ばれていた場所からメソッドに要求を渡すことができます。

はまた、あなたは、単に除くブロックでグラフを作成するつもりなら、あなたはget_or_createを使用して方がいいでしょう。

graph = Graph.objects.get_or_create(url=url) 

これは基本的に同じことですが、はるかに簡潔です。

関連する問題