我有三个型号。我们称之为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并删除它自己。
答案 0 :(得分:0)
只需删除self.delete()
- 您不需要它。因为您没有为批准的对象调用超类save
方法,所以它们实际上从未保存到数据库中。