如何在django ManyRelatedManager上进行验证?

时间:2012-05-17 18:52:13

标签: python django django-related-manager

当我将实例添加到M2M关系时,我想改变行为,可能会覆盖,这样我就可以做到这样的事情:

try:
    my_instance.one_field_set.add( another_instance )
except ValidationError:
    # do something

这可能吗?

2 个答案:

答案 0 :(得分:1)

是的,但不要这样做。

1)使用可以为您的M2M关系使用明确的intermediate模型 为其提供自定义manager,您可以在其中替换create方法。

2)在我看来,最好的方法是在其中一个模型上使用 实例方法add_something,它提供必要的验证和异常处理 逻辑。

答案 1 :(得分:0)

我发现了一个类似的问题,这不是我想要的,但作为一种解决方法有所帮助。

@receiver(m2m_changed, sender=MyModel.my_field.through)
def check(sender, **kwargs):
    if kwargs['action'] == 'pre_add':
        add = AnotherModel.objects.filter(pk__in=kwargs["pk_set"]) # instances being added
        # your validation here...

感谢mamachanko上的question