zkweb: зачем? Проверяйте данные в clean, там вызывайте ValidationError, а действия зависящие от данных, типа отправки почты, делайте в form_valid. Разделите логику проверки данных и реакции на данные.
zkweb: clean() - это для проверки правильности данных, действия лучше выполнять во вьюхе. На сколько я помню, у вас используются CBV, используйте метод form_valid.
Marat_Web: официальная документация покрывает все аспекты использования фреймворка, ничего более подробного и актуального в природе не существует. Дальше только практиковаться.
zkweb: смотря что именно проверять нужно. Если соответствие данных некоторым требованиям, то лучше переопределить соответствующие методы в формах. А если в зависимости от содержимого полей надо выполнять те или иные действия, то лучше во вьюхе.
zkweb: вполне, если соответствие между формами и группами точно известно на этапе разработки. Если движок должен будет подстраиваться под неопределённое количество групп, создаваемых администраторами сайта, то придётся городить динамически генерируемую форму. А это уже вопрос не очень простой.
Roman Kitaev: а завтра бизнес скажет "Убираем wishlist" и придётся делать миграцию, как минимум. А у меня надо будет просто закоменитить строчку в INSTALLED_APPS. Кроме того, я не утверждаю, что это единственно верное решение. Просто вариант. Уверен, автор вопроса будет рад и другим.
Алексей Овдиенко: зачем m2m?! На каждый товар, который захотел пользователь, создаётся объект Wish, содержащий ссылку на пользователя и этот товар. Для каждого пользователя может быть сколько угодно таких объектов, хоть по количеству товаров.
zkweb: тогда лучше сделать две разных формы, а во вьюхе переопределить метод get_form, в котором проверять группу текущего пользователя и возвращать соответствующую форму.