0

我有三个模型。我们将它们称为 Mod1、Mod1Request 和 UserProfile。

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)

然后 UserProfile 有一个“mod1s”属性,它是 Mod1 的 ManyToManyField。我想要完成的是:保存 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 并自行删除。

4

1 回答 1

0

只需删除self.delete()- 你不需要它。因为您没有save为已批准的对象调用超类方法,所以它们实际上从未保存到数据库中。

于 2012-07-13T02:21:42.087 回答