我想在某些对象上执行一些delete()
和一些save()
方法,这些对象不是我所在的当前类的实例。我试图在重载{{{I}中执行此操作1}}类的方法。这是场景:
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
答案 0 :(得分:0)
我注意到您正在尝试更新save()中的ManyToMany。您可以查看我对this thread的回答,看看它是否适用于您的情况。如果您正在使用管理界面并遇到此错误,那么几乎可以肯定这是您遇到的问题的一部分。您也可以查看提到的MonkeyPatch。
答案 1 :(得分:0)
我最终解决了这个问题。事实上,你可以完成我想做的事情。问题是我使用管理员完全错了。上面的a_tag
实际上是对Category对象的引用,因此调用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