您是否应该在其他类的模型中修改数据库中的对象

时间:2010-01-15 23:21:25

标签: python django model-view-controller django-models

我想在某些对象上执行一些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

2 个答案:

答案 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