2014-10-07 116 views
0

我在我的Django 1.7应用程序中有一个简单的用户和客户端模型的m2m关系。 m2m字段在客户端模型中声明。Django验证m2m模型字段

我希望在保存或更新客户端实例时验证m2m关系的用户值。 我的验证包括检查用户是否有一些属性,如果是true保存客户端和2m2关系,如果为false,则引发ValidationError。

我应该把这个逻辑放在哪里?我需要创建一个中间m2m模型?

回答

0

您应该可以在m2m_changed信号处理程序的pre_add阶段添加此验证。

+3

值得一提的是,您不能在信号处理程序代码中引发'ValidationError',因为它不会被正确处理(例如在管理员中),并且最终可能会出现500个令人头疼的错误。 – 2014-10-07 13:43:50

1

由于此验证应在保存和更新时执行,因此最好使用型号override the clean_fields method

+0

如果用户有一些有效的属性,我该如何检查我的客户端clean_fields(self,exclude)overrided method? 用户已经保存在分贝.... 在clean_fields()我有一个自我(客户端)实例...它有self.clients ManyToManyRelatedManager(从m2m关系)。 – 2014-10-07 13:47:16

+0

您将通过m2m字段参考它。 – 2014-10-07 13:49:13

+0

对不起,我不明白。我已经覆盖了客户端模型(我已经声明了一个m2m用户字段)clean_fields()... 在该方法中,我在运行时:self.users是ManyToManyRelatedManager而不是已选择的特定用户实例。 有什么不对? – 2014-10-07 13:55:45