Django多对多的自我,但不是自我

时间:2015-11-09 11:38:06

标签: django many-to-many

我有一个django模型需要链接到相同类型的其他模型,因此:

class Foo(Models.model):
    ...
    related_link = models.ManyToManyField('self', default=None, blank=True, null=True, related_name="related_link_record")

class FooAdmin(admin.ModelAdmin):
    filter_horizontal = ['related_link']

这很好用。但是,如果在管理界面中可以防止将Foo的特定实例链接到自身,那将是有用的。我想到这样做的一种方法如下:

def check_related_link(sender, instance, created, **kwargs):
    print "Just saved ", str(instance)
    for rel in instance.related_link.all():
        if rel.id == instance.id:
            print "Removing {0} from related links for {1}".format(str(rel),str(instance))
            instance.related_link.remove(rel)

signals.post_save.connect(check_related_link, sender=Foo)

此代码在保存后运行并声称要删除相关链接但不会发生此类删除。

有人可以在上面提出我的错误,或者更好的是,在管理界面中过滤掉同一个实例吗?

1 个答案:

答案 0 :(得分:0)

改为instance.related_link.remove(rel)而不是instance.related_link.remove(link)

没有链接,用rel替换链接。