Python 如何对django';谁是主要的相关经理?

Python 如何对django';谁是主要的相关经理?,python,django,django-related-manager,Python,Django,Django Related Manager,我想更改向M2M关系添加实例时的行为,可能是覆盖,以便执行以下操作: try: my_instance.one_field_set.add( another_instance ) except ValidationError: # do something 那可能吗?是的,但不要那样做 1) Use可以为您的M2M关系使用显式模型,并且 为它提供一个自定义方法,您可以在其中替换create方法 2) 不过,在我看来,最好的办法是在其中一个模型上安装一个 实例方法add_some

我想更改向M2M关系添加实例时的行为,可能是覆盖,以便执行以下操作:

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

那可能吗?

是的,但不要那样做

1) Use可以为您的M2M关系使用显式模型,并且 为它提供一个自定义方法,您可以在其中替换
create
方法

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

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

@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...

多亏了他。

只有当您想将其与您无法控制的django模型(例如django内置模型)挂钩时,这才有意义。或者您希望订阅此特定事件的许多操作。不是因为你的要求。