2012-07-13 23 views
0

我有三種模型。我們將它們稱爲Mod1,Mod1Request和UserProfile。self.delete()給出錯誤:「實例需要有一個主鍵值才能使用多對多關係」

Mod1Request樣子:

class Mod1Request(models.Model): 
date_requested = models.DateField(auto_now_add=True) 
mod1s = models.ManyToManyField('Mod1') 
user = models.ForeignKey(User) 
approved = models.BooleanField() 
def save(self, *args, **kwargs): 
    if self.approved: 
     for c in list(self.mod1s.all()): 
      mod = mod1.objects.get(id=c.id) 
      self.user.get_profile().mod1s.add(mod) 
     self.delete() 
    else: 
     super(Mod1Request, self).save(*args, **kwargs) 

然後在用戶配置具有 'mod1s' 屬性,它是一個ManyToManyField到MOD1。我試圖完成的是: 保存Mod1Request時,如果設置了Approved,則將Mod1Request中列出的Mod1添加到UserProfile中,然後刪除Mod1Request本身。

這個功能直到刪除它自己。如果我刪除self.delete()行,則Mod1Request中的Mod1實例將正確添加到UserProfile.mod1s。但是,如果我把它留在我得到以下錯誤:

'Mod1Request' instance needs to have a primary key value before a many-to-many relationship can be used. 

任何幫助將不勝感激。

編輯:我應該說明,Mod1Request是由一個用戶在表單中輸入,然後由另一個(管理員)用戶批准。因此,管理員用戶檢查批准並「保存」Mod1Request。然後,Mod1Request應該將Mod1添加到UserProfile並刪除它自己。

回答

0

只要刪除self.delete() - 你不需要它。因爲您沒有爲已批准的對象調用超類save方法,所以它們實際上從未實際保存到數據庫。

+0

我編輯了說明以闡明我正在嘗試做什麼。基本上,我想在Mod1s添加到UserProfile後從數據庫中刪除請求。 – strocknar 2012-07-13 12:38:03

相關問題