我想改變的行爲,或許覆蓋,當我添加一個實例到M2M的關係,這樣我就可以做這樣的事情:如何在django的ManyRelatedManager上進行驗證?
try:
my_instance.one_field_set.add(another_instance)
except ValidationError:
# do something
這可能嗎?
我想改變的行爲,或許覆蓋,當我添加一個實例到M2M的關係,這樣我就可以做這樣的事情:如何在django的ManyRelatedManager上進行驗證?
try:
my_instance.one_field_set.add(another_instance)
except ValidationError:
# do something
這可能嗎?
是的,但不要那樣做。
1)使用可以使用一個明確的intermediate
模型用於M2M關係, 爲它提供一個自定義manager
在其中可以更換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內置模型)掛鉤時纔有意義。或者您想要訂閱有關此特定活動的許多操作。不是爲了你所問的。 – rantanplan