2014-10-07 127 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