インスタンスを M2M リレーションに追加するときの動作を変更して、おそらく上書きして、次のようなことができるようにしたいと思います。
try:
my_instance.one_field_set.add( another_instance )
except ValidationError:
# do something
それは可能ですか?
インスタンスを M2M リレーションに追加するときの動作を変更して、おそらく上書きして、次のようなことができるようにしたいと思います。
try:
my_instance.one_field_set.add( another_instance )
except ValidationError:
# do something
それは可能ですか?
はい、しかしそのようにしないでください。
intermediate
1) M2M 関係に明示的なモデルを使用しmanager
、メソッドを置き換えることができるカスタムを提供できますcreate
。
2) ただし、私の意見では、これらのモデルの 1 つに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...
mamachanko さんの質問に感謝します。