我有一个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)
此代码在保存后运行并声称要删除相关链接但不会发生此类删除。
有人可以在上面提出我的错误,或者更好的是,在管理界面中过滤掉同一个实例吗?
答案 0 :(得分:0)
改为instance.related_link.remove(rel)
而不是instance.related_link.remove(link)
没有链接,用rel替换链接。