2013-02-04 61 views
0

根據1.4 documentation關於使用具有多個數據庫的Admin,您只需要在ModelAdmin子類中實現5個方法。我以推薦的方式覆蓋了全部5個。瀏覽數據庫的工作沒有問題。Django管理多個數據庫

然而,試圖挽救現有的記錄,我得到一個錯誤,聲稱表不存在於數據庫中 - 在默認數據庫的項目,而不是我的方法實現指定的一個。事實上,save_model()在引發錯誤之前不會被調用,所以在它到達那裏之前,有一個引用某處不成功地獲取正確數據庫的「使用」。

任何人都知道缺失的是什麼?這是我的ModelAdmin類:

class TransactionAdmin(admin.ModelAdmin): 
    using = "salesdb" 

    def save_model(self, request, obj, form, change): 
     # Tell Django to save objects to the 'other' database. 
     obj.save(using=self.using) 

    def delete_model(self, request, obj): 
     # Tell Django to delete objects from the 'other' database 
     obj.delete(using=self.using) 

    def queryset(self, request): 
     # Tell Django to look for objects on the 'other' database. 
     return super(TransactionAdmin, self).queryset(request).using(self.using) 

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 
     # Tell Django to populate ForeignKey widgets using a query 
     # on the 'other' database. 
     return super(TransactionAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs) 

    def formfield_for_manytomany(self, db_field, request=None, **kwargs): 
     # Tell Django to populate ManyToMany widgets using a query 
     # on the 'other' database. 
     return super(TransactionAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs) 

而我得到的錯誤是:

(1146, "Table 'django_dev._Transactions' doesn't exist") 

django_dev是默認的數據庫,而不是sales數據庫。

+0

在PyCharm中通過它,似乎是某種程度上與時間有關。如果我斷開queryset()方法的返回並遍歷每一行,直到它到達save_model(),那麼它看起來正在嘗試工作(我得到關於第四列之一的截斷數據的錯誤 - 不確定如果這是相關的)。但是,如果我不在queryset()上中斷,它將永遠不會保存到save_model()。實際上,這個問題出現在options.py(在最新的Django 1.4中)的第1034行:form = ModelForm(request.POST,request.FILES,instance = obj),所以創建表單SOMETIMES會導致錯誤。 – machomeautoguy

+0

更多信息 - 這似乎是表單驗證中的一個錯誤。似乎有時在嘗試驗證唯一字段時使用了不正確的數據庫來查詢唯一性。我刪除了有兩個字段的「unique = True」語句,現在我正在越過這個問題。 – machomeautoguy

回答