我有三種模型。我們將它們稱爲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並刪除它自己。
我編輯了說明以闡明我正在嘗試做什麼。基本上,我想在Mod1s添加到UserProfile後從數據庫中刪除請求。 – strocknar 2012-07-13 12:38:03