2010-01-15 40 views
1

我想對一些不是當前類的實例的對象執行一些delete()和一些save()方法。我正在嘗試在超載的save()方法中做到這一點。這裏是之情況:您可以/應該修改其他類模型中數據庫中的對象

class Item(models.Model): 
    name = models.CharField(max_length=500) 
    category = models.ForeignKey(Category, null=True, related_name='add_item') 
    tag = models.ManyToManyField(Category, null=True, related_name='tag_item') 

    def save(self, *args, **kwargs): 
     super(Item, self).save(*args, **kwargs) 
     for a_tag in self.tag.all(): 
      #do stuff here 
      a_tag.delete() 
     cat = self.category 
     while cat is not None: 
      cat.add_item.add(self) 
      #do stuff here 
      cat.save() 
      cat = cat.parent 

這不工作,當我嘗試這樣做,我得到以下異常:

Exception AttributeError: "'Cursor' object has no attribute 'connection'" in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x905c3ac>> ignored 
+1

請發佈完整的回溯。即使你所做的事情是不可能的,你也不應該得到那個錯誤,所以這看起來可能是一個Django錯誤。 – 2010-01-16 10:47:04

回答

0

我最終解決了這個問題。事實上,你可以完成我想要做的事情。問題是我使用的管理人員完全錯誤。上面的a_tag實際上是對類別對象的引用,因此調用delete()實際上是刪除了我的類別,這就是爲什麼我得到我假設的奇怪異常。這裏是新工作的模型代碼的代碼片段:

def save(self, *args, **kwargs): 
    super(Item, self).save(*args, **kwargs) 
    for a_tag in self.tag.all(): 
     a_tag.tag_item.clear() 
    cat = self.category 
    while cat is not None: 
     cat.tag_item.add(self) 
     cat = cat.parent 
0

我注意到你想在你保存更新多對多( )。你可以看看我對this thread的回答,看看它是否適用於你的情況。如果您使用管理界面並遇到此錯誤,那麼它幾乎肯定是您遇到的問題的一部分。你也可能想看看提到的MonkeyPatch。

相關問題