当我将实例添加到M2M关系时,我想改变行为,可能会覆盖,这样我就可以做到这样的事情:
try:
my_instance.one_field_set.add( another_instance )
except ValidationError:
# do something
这可能吗?
答案 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。