0

当我将实例添加到 M2M 关系时,我想更改行为,可能会覆盖,以便我可以执行以下操作:

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

那可能吗?

4

2 回答 2

1

是的,但不要那样做。

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

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

于 2012-05-17T23:16:05.280 回答
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提出的问题

于 2012-05-18T15:41:12.793 回答