2012-01-19 47 views
1

我想在Django管理界面保存時自動添加一些項目到模型的ManyToMany字段。但是,調用model.many2manyfield.add()被悄悄失敗定製的django管理類可以將項目添加到模型的ManyToMany字段嗎?

我Django應用程序的models.py

​​

我Django應用程序的admin.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) 

從graphite_util.py:

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中調用的方法,因爲請求在那裏可用。

此外,如果您只是要在except塊中創建圖表,最好使用get_or_create

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

它基本上做同樣的事情,但更簡潔。

相關問題